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);
添加回答
举报