CryptoJs AES加密和Java解密

CryptoJs AES加密和Java解密,java,aes,cryptojs,Java,Aes,Cryptojs,我遇到了上述解决方案。我以前尝试过将散列从md5改为SHA-256,但没用。 给出了以下错误: javax.crypto.BadPaddingException:给定的最后一个块没有正确填充。如果在解密过程中使用了坏密钥,则可能会出现此类问题。 在helper函数中有什么需要更改的吗?我使用中的答案作为包含加密的程序的基础,并将MessageDigest从MD5更改为SHA-256 运行此程序成功解密加密数据(作为密文中的Base64字符串): 更改:添加加密并使用SHA-256作为哈希算法 密

我遇到了上述解决方案。我以前尝试过将散列从md5改为SHA-256,但没用。 给出了以下错误:

javax.crypto.BadPaddingException:给定的最后一个块没有正确填充。如果在解密过程中使用了坏密钥,则可能会出现此类问题。

在helper函数中有什么需要更改的吗?

我使用中的答案作为包含加密的程序的基础,并将MessageDigest从MD5更改为SHA-256

运行此程序成功解密加密数据(作为密文中的Base64字符串):

更改:添加加密并使用SHA-256作为哈希算法
密文:aaaaaaaaaaaaaaaaaaaauumnxxbgvkwpqe+kfq0f3K/cq6wwwwwffsiba8pxsoi0z7drhtnvrv1mbysoznh9r9ymltsm/6en8e9JmEingdD3Rgp8=

敏捷的棕色狐狸跳过了懒狗。由于您提供给我们的信息非常稀少,我们只能采用“猜测模式”。我相信这是MD5与SHA-256相比的输出长度。MD5散列的长度是SHA-256的一半,因此这可能会导致错误,但没有看到您在CryptoJS+Java端用于加密和解密的源代码,这完全是推测。
CryptoJS.AES.encrypt
使用隐式(和硬编码)MD5(作为OpenSSL函数的摘要
EVP_BytesToKey
)。如果在Java代码中使用SHA256而不是MD5,则会产生不同的加密和解密密钥。请参考我的描述中的链接。因此,如果您在js字符串中给它一个密码,那么dupe FWIW cryptojs.AES仅强制使用旧的OpenSSL样式的密钥派生,即EVP_BytesToKey(md5,salt8,n=1),包括IV和数据格式。您可以通过在js缓冲区中为其提供一个密钥(如果适用的话)来执行标准加密,该密钥可以使用更好的PBKDF(如PBKDF2、bcrypt、argon2)或您选择并实现的非基于密码的方案(如DH或EG)。