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:
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.
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); } }
Partager