使用 AES 算法在 java 中进行加密,在 php 中进行解密


Encryption in java and Decryption in php using AES algorithm

我需要使用 AES 算法在 java 中加密字符串,并在 PHP 中解密数据。我已经搜索过,但我没有得到任何确切的答案。

在一些帖子中,他们使用了填充。他们还谈到了密钥大小。

但是,我对密钥大小和我应该使用什么填充一无所知。

因此,请通过发布一些示例代码和解释来帮助我更好地理解。

提前感谢!!

密钥大小并不重要,任何可用大小都是安全的。

AES 是分组密码,这意味着输入必须是块大小的倍数:16 字节。除非输入始终是块大小的倍数,否则将需要填充。

AES 的标准填充是 PKCS#7(有时表示为 PKCS#5)。 问题是PHP和通常使用的mcrypt库,它不支持PKCS#7填充,只有空填充,不能与二进制数据一起使用。bozo 维护者拒绝添加 PKCS#7 填充。如果你使用 mcrypt,你将不得不添加自己的 PKCS#7 填充支持,这并不难,一般是三行代码。

但还有更多的问题。加密模式和CBC模式需要一个iv,它应该是随机数据。身份验证以确定解密的数据是否正确。键不应该是字符串,如果是,它应该用于派生具有 PBKDF2 等函数的键。

我建议使用可用于Java,php和许多其他语言的RNCryptor。它提供了创建安全加密的所有必要元素,包括:AES-256加密,CBC模式,使用PBKDF2进行密码拉伸,密码加盐,随机IV,加密然后哈希HMAC身份验证和版本控制。