Précédent   Forum du club des développeurs et IT Pro > Java > Général Java > APIs > Sécurité
Sécurité Vos questions sur les APIs traitant de la sécurité (JAAS, JGuard, etc...) et autres protocoles d'authentification, ainsi que les APIs de cryptographie.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 25/12/2012, 22h56   #1
mikado10
Invité de passage
 
Inscription : 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.
mikado10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2012, 12h55   #2
NoClassDefFound
Membre confirmé
 
Homme
Inscription : octobre 2011
Messages : 156
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : octobre 2011
Messages : 156
Points : 207
Points : 207
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");
NoClassDefFound est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 01h33.


 
 
 
 
Partenaires

Hébergement Web