Bonjour à tous,
Je me tourne vers vous désespérément afin de trouver des réponses car je n'en peux plus de consulter des forums avec des bouts de réponses qui ne mènent à rien.
Le principe est simple, je stocke sur une base de données de données cryptés, et je souhaite pouvoir les décrypter =)
J'utilise CryptoJS en javascript pour encrypter les données avant de les envoyer sur le serveur, et j'ai un service java qui à besoin à un moment donnée de les décrypter ^^.
Voici le code javascript je j'utilise et qui fonctionne dans les deux sens (crypte et décrypte) :
Niquel je suis super content jusque là. Comme vous pouvez le voir,a fin de simplifier la démarche clé et initial vecteur sont identiques. D'après CryptoJS, c'est une clé de 256 bits qui est générée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 var secret = 'phrase a crypter'; var key = 'cle'; console.log(key + "#"); // Entré : String Utf8 var test = CryptoJS.AES.encrypt(secret, key, { iv: key, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); // Sortie : Base 64 // U2FsdGVkX1+3+hj2N4kPGJRZpeEG1+RQKAKxNahOCiwS1wtOGSe39NEq7FNmwED+ // Entré : String Base 64 var pass = CryptoJS.AES.decrypt(test, key, { iv: key, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); // Sortie : String HEX console.log(pass.toString(CryptoJS.enc.Utf8) + "#"); // On remet en String Utf8 pour le lire // phrase a crypter -> =D
On rentre dans le vif des problèmes, aucun code que j'ai pu trouver ou bidouillé ne fonctionnent :
J'ai une super erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Security.addProvider(new BouncyCastleProvider()); String plainPassword = ""; SecretKeySpec key = new SecretKeySpec("cle\0\0\0\0\0\0\0\0\0\0\0\0\0".getBytes(), "AES"); IvParameterSpec iv = new IvParameterSpec("cle\0\0\0\0\0\0\0\0\0\0\0\0\0".getBytes()); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC"); cipher.init(Cipher.DECRYPT_MODE, key, iv); byte[] encoded = cipher.doFinal(Base64.decodeBase64("U2FsdGVkX1+3+hj2N4kPGJRZpeEG1+RQKAKxNahOCiwS1wtOGSe39NEq7FNmwED+".getBytes())); plainPassword = new String(encoded); System.out.println(plainPassword);
Voili, que dire de plus, j'ai fais attention a prendre les même encodace, padding, clé, iv mais rien n'y fait, je passe a côté de quelque chose.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Exception in thread "main" javax.crypto.BadPaddingException: pad block corrupted at org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineDoFinal(Unknown Source) at javax.crypto.Cipher.doFinal(Cipher.java:2087) at main.test.main(test.java:77)
Merci d'avance à tous, si vous avez des questions, n'hésitez pas.
A bientot
Partager