Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Invité de passage
    Inscrit en
    décembre 2012
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : décembre 2012
    Messages : 1
    Points : 0
    Points
    0

    Par défaut Cryptage symétrique - longueur clé invalide

    Bonjour,

    je viens vers vous afin d'avoir des informations. Est-il possible de valider la clé SecretKeySpec quand nous faisons un cryptage symétrique ?

    En effet l'utilisateur peut chiffrer les fichiers généré. Cependant quand je souhaite faire des tests j'ai des erreurs.

    La commande:
    Code :
     System.out.println("cipher = " + Cipher.getMaxAllowedKeyLength("<ALGO>"));
    me retourne:
    et quand j'utilise le code (exemple avec AES mais j'ai l'erreur avec DES...):
    Code :
    1
    2
    3
    4
    5
     
                Cipher cipher = Cipher.getInstance("AES");
                SecretKeySpec key = new SecretKeySpec(strPassword.getBytes(), "AES");
                cipher.init(Cipher.ENCRYPT_MODE, key);
                byte[] ecrypted = cipher.doFinal(input.getBytes());
    j'obtiens:
    Code :
    1
    2
    3
    4
    5
    6
    Exception in thread "main" java.security.InvalidKeyException: Invalid AES key length: 1 bytes
    	at com.sun.crypto.provider.AESCrypt.init(AESCrypt.java:87)
    	at com.sun.crypto.provider.ElectronicCodeBook.init(ElectronicCodeBook.java:93)
    	at com.sun.crypto.provider.CipherCore.init(CipherCore.java:469)
    	at com.sun.crypto.provider.CipherCore.init(CipherCore.java:386)
    	at com.sun.crypto.provider.AESCipher.engineInit(AESCipher.java:186)
    Donc ma question. Est-il possible de valider le mdp ou existe t'il d'autres solutions ? Je pensais passer par en hachage de la clé avec SHA-256 par exemple mais j'ai le même problème.

    Merci.

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    octobre 2011
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : octobre 2011
    Messages : 203
    Points : 315
    Points
    315

    Par défaut

    Je ne sais pas si c'est une erreur de copier/coller mais à mon avis il manque quelque chose dans ton instruction:

    Code :
    1
    2
     
    SecretKeySpec key = new SecretKeySpec(strPassword.getBytes(), "AES");
    Il faut initialiser la SecretKeySpec avec le contenu binaire de la clef, pas avec celui du mot de passe:

    Code :
    1
    2
    3
    4
    5
    6
     
    KeyStore ks = KeyStore.getInstance("JCEKS", "SunJCE");
    FileInputStream fis = new FileInputStream(keystorePath);
    ks.load(fis, keystorePassword.toCharArray());
    SecretKey skey = (SecretKey) ks.getKey(keyName, keyPassword.toCharArray());
    SecretKeySpec skeySpec = new SecretKeySpec(skey.getEncoded(), "AES");

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •