6
我有一個PHP servor與CFB模式密碼/ 3DES/CFB/Java和PHP
解密3DES數據I加密在PHP中:
$montant = "500";
$message_crypte = mcrypt_encrypt(MCRYPT_3DES, "N4y1FRDRJ7wn7eJNnWaahCIS", $montant, ,CRYPT_MODE_CFB, "NCNPJDcR");
$montant = base64_encode($message_crypte);
這個腳本在PHP與其他OK系統。
而且我想在Java加密:
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("ISO-8859-1")));
final byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24);
for (int j = 0, k = 16; j < 8;) {
keyBytes[k++] = keyBytes[j++];
}
//keySpec = new DESedeKeySpec(keyBytes);
keySpec = new DESedeKeySpec(keyString.getBytes());
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/NoPadding");
//"SunJCE");
ecipher.init(Cipher.ENCRYPT_MODE, key, iv);
if (value == null)
return null;
// Encode the string into bytes using utf-8
byte[] valeur = value.getBytes("ISO-8859-1");
//byte[] utf8 = value.getBytes();
// Encrypt
byte[] enc = ecipher.doFinal(valeur);
// Encode bytes to base64 to get a string
return new String(Base64.encodeBase64(enc), "ISO-8859-1");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
我有不一樣的結果,在PHP和JAVA
如何modifiy JAVA治療得到相同的結果,PHP ?
謝謝
文斯
它看起來像你的PHP不執行任何PKCS#5填充 - 是剛剛從你這裏省略樣本,還是有沒有執行填充在PHP方面? – sarnold
我的PHP腳本已經與PHP或ASP或C#中的其他站點一起工作,所以我不會更改代碼,而是使用Java。 你有想法嗎? 我使用NoPadding進行了測試,但它也無法正常工作...... – user1450740
這可能只是我,但對我來說,它看起來像你在PHP腳本中不是base64編碼,所以如果你在另一端對它進行解碼,會被理解爲純粹的亂碼? – 2012-06-14 09:21:17