Problème cipher / 3DES/ mode CFB
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:
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:
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