我需要使用AES算法加密java中的字符串并在PHP中解密数据。我搜索过但我得到了任何确切的答案。
在某些帖子中,他们使用了Padding。他们还谈到了关键尺寸。
但是,我不知道密钥大小和我应该使用的填充。
所以请通过发布一些示例代码和解释来帮助我更好地理解。
提前致谢!!
答案 0 :(得分:2)
密钥大小并不重要,任何可用的大小都是安全的。
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身份验证和版本控制。