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) :


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
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.

On rentre dans le vif des problèmes, aucun code que j'ai pu trouver ou bidouillé ne fonctionnent :

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);
J'ai une super erreur :

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)
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.

Merci d'avance à tous, si vous avez des questions, n'hésitez pas.

A bientot