IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sécurité Java Discussion :

Chiffrement RSA - Problème avec des caractères accentués


Sujet :

Sécurité Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 11
    Points : 11
    Points
    11
    Par défaut Chiffrement RSA - Problème avec des caractères accentués
    Chiffrement RSA - Problème avec des caractères accentués

    Bonjour,

    Novice dans l'utilisation de RSA, j'ai développé une petite fonction de chiffrement de mots de passe qui ne fonctionne pas quand le mot de passe contient des caractères accentués. Évidemment, il y a un moyen simple de « contourner » le problème en remplaçant systématiquement les caractères accentués côté serveur et côté client, mais ce n'est pas très propre et j'aimerais comprendre.

    J'imagine qu'il s'agit d'un problème d'encodage. Cependant, je ne trouve pas l'endroit précis où je dois spécifier UTF-8 dans les bibliothèques Bountycastle du côté client et java.security.* du côté serveur.

    Je vois des tonnes de classes pour transformer les chaînes en HEX ou en Base64, faire de l'encodage (encodings) et faire du remplisssage (padding)... J'y comprends rien.

    Est-ce que cela pourrait m'aider?

    Merci

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Si vous commenciez par nous montrer le code qui pose problème?

  3. #3
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Il est fortement déconseillé de coder des trucs maisons exotiques pour tout ce qui touche à la sécurité des applications.

    Il existe des méthodologies et des mécanismes largement éprouvés pour faire tout cela.

    Par exemple pour protéger un mot de passe dans une base de données (ou un fichier de config) il y a la norme PBKDF2.

    Cf ce thread en autre.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Si vous commenciez par nous montrer le code qui pose problème?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    private String encrypterMotDePasse(String motDePasse, ClePublique clePublique) {
     
        String motDePasseEncrypte = "";
        byte[] motDePasseEnBytes = null;
        if ( null != clePublique) {
     
            BigInteger modulo = new BigInteger(clePublique.getModulo());
            BigInteger pubExp = new BigInteger(clePublique.getExposant());
            RSAKeyParameters pubParameters = new RSAKeyParameters(false, modulo, pubExp);
     
            motDePasseEnBytes = motDePasse.getBytes();
     
            AsymmetricBlockCipher moteurCipher = new RSAEngine();
     
            moteurCipher.init(true, pubParameters);
     
            try {
     
                motDePasseEnBytes =
                moteurCipher.processBlock(motDePasseEnBytes,
                0, motDePasseEnBytes.length);
     
            }
            catch (Exception e) {
     
                displayStatus("Failed - exception " + e.toString(),"errorMsg");
     
            }
     
            motDePasseEncrypte = new String(motDePasseEnBytes);
     
        }
        return motDePasseEncrypte;
     
    }
    J'ai essayé en ajoutant des .getBytes("UTF-8") et des new String(motDePasseEnBytes,"UTF-8");
    rien n'y fait...
    [/SIZE]

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 11
    Points : 11
    Points
    11
    Par défaut Un code chiffré n'est pas du texte! (Ciphertext is not text!)
    En cherchant sur le Web pour régler mon problème, j'ai trouvé un très bon article sur le sujet (Cryptography with International Character Sets)l et aussi (Storing and representing ciphertext)

    Règle 1: Un code chiffré n'est pas du texte! (Ciphertext is not text!)

    Règle 2: Travailler avec des bytes pas des chaînes de textes ("Work with bytes not text strings")

    Règle 3: Ne jamais mettre des bytes chiffrés directement dans une chaîne de texte ("Do not put ciphertext bytes directly into a string type")

    J'ai aussi compris pourquoi utiliser l'encodage BASE64 ou HEX pour transférer les données chiffrées entre les plateformes. : « Store ciphertext either as a raw binary file or convert it to base64 or hexadecimal format.»

    Mon problème n'est pas encore réglé, mais j'ai des pistes sérieuses...

    Remarquez que j'avais déjà essayé de convertir mes bytes chiffrés en HEX mais sans grand succès, puis j'ai abandonné... Probablement que j'avais un problème ailleurs.

    Le seul problème que je vois avec ces deux excellents articles, c'est qu'ils contiennent du code en C, en C++, en C# et en VB.NET, VB6 et même VBA MAIS PAS UNE LIGNE DE JAVA... à n'en pas douter ils émanent d'un disciple du grand Bill... Dommage!

    Je vous tiens informé de mes progrès... à moins que le manque de temps ne m'oblige à filtrer / remplacer les caractères multibytes. Dans ce cas, honte sur moi!

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 11
    Points : 11
    Points
    11
    Par défaut Effectivement il fallait convertir en Hex (ou encore Base64)
    private String encrypterMotDePasse(String motDePasse, ClePublique clePublique) {
    String motDePasseChiffreStringHex = "";

    // Conversion du mot de passe du format String => bytes[]
    byte[] motDePasseEnBytes = motDePasse.getBytes();

    if ( null != clePublique) {
    // Initialisation du moteur de chiffrement
    BigInteger modulo = new BigInteger(clePublique.getModulo());
    BigInteger pubExp = new BigInteger(clePublique.getExposant());
    RSAKeyParameters pubParameters = new RSAKeyParameters(false,
    modulo, pubExp);

    AsymmetricBlockCipher moteurDeChiffrement = new RSAEngine();

    moteurDeChiffrement.init(true, pubParameters);

    // Chiffrement du mot de passe
    byte[] motDePasseChiffreEnBytes = null;
    try
    {
    motDePasseChiffreEnBytes =
    moteurDeChiffrement.processBlock(motDePasseEnBytes,
    0,motDePasseEnBytes.length);
    }
    catch (Exception e)
    {
    displayStatus("Failed - exception " + e.toString(),"errorMsg");
    }

    // Conversion mot de passe chiffre de bytes[] vers bytes[] Hex

    byte[] motDePasseChiffreEnBytesHex =
    Hex.encode(motDePasseChiffreEnBytes);
    // Conversion mot de passe chiffre de bytes[] Hex vers String

    Hex
    motDePasseChiffreStringHex = new
    String(motDePasseChiffreEnBytesHex);
    }
    return motDePasseChiffreStringHex;
    }

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    quand tu convertis des String en byte[] ou l'inverse, précise TOUJOURS l'encodage à utiliser, sinon tu aura de sales surprises à l'avenir.

  8. #8
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    J'ai beaucoup de mal à comprendre l'intérêt de ton machin. C'est pour t'amuser personnellement ou c'est dans un contexte professionnel ?

    On ne chiffre avec RSA que des clefs privées (dites aussi clefs de session) dans le but de réaliser un échange. Pour chiffrer des mots de passes, il y a des mécanismes très précis dont j'ai donné le lien dans mon post précédent.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 11
    Points : 11
    Points
    11
    Par défaut Machin... académique...
    Il faut voir « mon machin » comme un exercice simple de cryptographie asymétrique, ou cryptographie à clé publique. Tu sais les machins avec Bob et Alice... qu'on apprend à l'université.

  10. #10
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Citation Envoyé par HommeDeJava Voir le message
    Il faut voir « mon machin » comme un exercice simple de cryptographie asymétrique, ou cryptographie à clé publique. Tu sais les machins avec Bob et Alice... qu'on apprend à l'université.
    Dans ce cas procures-toi ce livre. Tu verras c'est de la bombe. Tu peux télécharger ici les sources utilisées dans le livre où tu trouveras des exemples concrets d'utilisation de RSA.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Merci Marco!

    Citation Envoyé par Marco46 Voir le message
    Dans ce cas procures-toi ce livre. Tu verras c'est de la bombe. Tu peux télécharger ici les sources utilisées dans le livre où tu trouveras des exemples concrets d'utilisation de RSA.
    Génial! Tout comme la citation de Kenneth E. Boulding

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Probléme avec les caractéres accentués suite à un export
    Par UNi[FR] dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 17/05/2006, 09h10
  2. [SQL-Server] ms sql server et php : problème avec les caractères accentués
    Par stephane9422 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 05/12/2005, 17h45
  3. [AJAX] Problèmes avec les caractères accentués
    Par marti dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 26/10/2005, 14h10
  4. Réponses: 5
    Dernier message: 04/09/2005, 12h34
  5. Chaînes avec des caractères accentués dans Interbase
    Par François Marliac dans le forum Bases de données
    Réponses: 2
    Dernier message: 04/03/2004, 22h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo