1 回答

TA貢獻1815條經驗 獲得超13個贊
在大多數語言中,將 Zip 文件之類的二進制內容視為字符串通常是一個大錯誤。在 Javascript 方面,CryptoJS 期望提供任意字節序列作為CryptoJS.lib.WordArray參數。
所以,而不是
var ciphertext = aesUtil.encrypt(salt, iv, passPhrase, data.toString());
你應該有
var ciphertext = aesUtil.encrypt(salt, iv, passPhrase, CryptoJS.lib.WordArray.create(data));
在 Java 端,將函數 decrypt 更改為返回一個byte[].
public byte[] decrypt(String salt, String iv, String passphrase, String ciphertext) {
SecretKey key = generateKey(salt, passphrase);
byte[] decrypted = doFinal(Cipher.DECRYPT_MODE, key, iv, base64(ciphertext));
return decrypted;
}
在 中main,將代碼更改為類似于
String fileString = new String(Files.readAllBytes(Paths.get(encryptedPath)));
byte [] decryptedText = aesUtil.decrypt(salt, iv, keyString, fileString);
Files.write(Paths.get(decryptedPath), decryptedText);
添加回答
舉報