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 :

Impossible d'obtenir une clé de taille de 256bits avec PBEKeySpec


Sujet :

Sécurité Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné

    Homme Profil pro
    Développeur J2EE Senior
    Inscrit en
    Mai 2008
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur J2EE Senior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 419
    Par défaut Impossible d'obtenir une clé de taille de 256bits avec PBEKeySpec
    Bonjour à tous.

    J'essaie de mettre en place un chiffrage AES. Je me suis inspiré de la solution expliquée ici. Mais j'ai un problème car les clés obtenues ne font que 32 bits. Je n'arrive pas à comprendre d'où vient le problème, pouvez vous m'aider?

    Voici un snippet de code qui permet de le reproduire:
    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
    import java.security.NoSuchAlgorithmException;
    import java.security.spec.InvalidKeySpecException;
    import java.security.spec.KeySpec;
     
    import javax.crypto.SecretKey;
    import javax.crypto.SecretKeyFactory;
    import javax.crypto.spec.PBEKeySpec;
    import javax.crypto.spec.SecretKeySpec;
     
    import junit.framework.Assert;
     
    public class FailKeyLength {
     
        public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeySpecException {
            String password = "aaaaaeeeeeiiiiiooooouuuuuyyyyyZZ";
            String SALTKEY = "12345678";
     
            SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
            KeySpec spec = new PBEKeySpec(password.toCharArray(), SALTKEY.getBytes(), 1024, 256);
            SecretKey tmp = factory.generateSecret(spec);
            SecretKey key = new SecretKeySpec(tmp.getEncoded(), "AES");
            Assert.assertEquals(256, tmp.getEncoded().length);
            Assert.assertEquals(256, key.getEncoded().length);
        }
     
    }
    Le programme s'arrête à la première assertion, mais si on la commente, on observe que la deuxième ne passe pas non plus. J'ai essayé de faire varier la taille du mot de passe et celle de la clé de salage à tout hasard, mais sans impact. Et je ne comprends pas à quoi sert le paramètre "increment count" (1024 ici) du constructeur. J'ai aussi vérifié que ma taille de clé n'était pas bridée par le JCE policy, mais non.
    Mes cours sur l'écosystème Java EE - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  2. #2
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Cf ce thread.

    Et je ne comprends pas à quoi sert le paramètre "increment count" (1024 ici) du constructeur
    C'est le nombre d'itérations que va effectuer le mécanisme PBE. Cf Wikipedia.

  3. #3
    Membre chevronné

    Homme Profil pro
    Développeur J2EE Senior
    Inscrit en
    Mai 2008
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur J2EE Senior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 419
    Par défaut
    Ok merci de la réponse, en fait j'ai fait une erreur un peut bête de confondre bytes et bits, et j'obtiens bien une clé de 32 bytes, ce qui fait 256 bits, donc mon bout de code est tout ce qu'il y a de plus valide.

    Je posais cette question car je suis en train d'essayer de débugger un process de chiffrage et je pensais que le problème résidait à ce niveau, mais il faut croire que non, je vais donc poursuivre mes investigations. En attendant ce problème est résolu, merci.
    Mes cours sur l'écosystème Java EE - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. obtenir une liste de taille indéfinie
    Par joseph.vidal-rosset dans le forum Prolog
    Réponses: 1
    Dernier message: 21/12/2011, 14h53
  2. Obtenir une chaine de taille fixe
    Par GreatDeveloperOnizuka dans le forum C#
    Réponses: 1
    Dernier message: 04/10/2010, 18h09
  3. Impossible d'obtenir une chaîne d'un Web Service
    Par laurent_diep dans le forum Silverlight
    Réponses: 6
    Dernier message: 11/12/2008, 13h30
  4. Impossible de créer une partition à la taille du DD
    Par randriano dans le forum Composants
    Réponses: 20
    Dernier message: 25/05/2008, 15h57

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