Bonjour à tous,

Voilà, jusqu'à présent, j'utilise déjà le cryptage 3DES dans un environnement PHP pour des échanges de données avec des sites extérieurs. Tout fonctionne très bien.

Actuellement, je développe des web services en java, dans lesquels je dois utiliser le même mode de cryptage pour atteindre mon autre serveur en PHP.

Le cryptage en lui-même fonctionne, mais sur mon serveur PHP, je n'arrive pas à décrypter correctement.

Voici mon code java
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
public class CryptData {
	private KeySpec keySpec;
	private SecretKey key;
	private IvParameterSpec iv;
 
	public CryptData(String keyString, String ivString) {
		try {
			final MessageDigest md = MessageDigest.getInstance("md5");
			final byte[] digestOfPassword = md.digest(Base64
					.decodeBase64(keyString.getBytes("utf-8")));
			final byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24);
			for (int j = 0, k = 16; j < 8;) {
				keyBytes[k++] = keyBytes[j++];
			}
 
			keySpec = new DESedeKeySpec(keyBytes);
 
			key = SecretKeyFactory.getInstance("DESede")
					.generateSecret(keySpec);
 
			iv = new IvParameterSpec(ivString.getBytes());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
 
	public String encrypt(String value) {
		try {
			Cipher ecipher = Cipher.getInstance("DESede/CFB/PKCS5Padding",
					"SunJCE");
			ecipher.init(Cipher.ENCRYPT_MODE, key, iv);
 
			if (value == null)
				return null;
 
			// Encode the string into bytes using utf-8
			byte[] utf8 = value.getBytes("UTF8");
 
			// Encrypt
			byte[] enc = ecipher.doFinal(utf8);
 
			// Encode bytes to base64 to get a string
			return new String(Base64.encodeBase64(enc), "UTF-8");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}
et mon serveur PHP
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
$montant = "AlcGCGBoh84=";
 
$montant = base64_decode($montant);
 
//$montant = utf8_decode($montant);
 
$message_crypte = mcrypt_decrypt(MCRYPT_3DES, $maKey, $montant, ,CRYPT_MODE_CFB, $iv);
Auriez-vous une idée qui expliquerait pourquoi ça ne fonctionne pas?

D'avance merci

Vince