我被告知要使用AES256加密一些表单数据(字符串),并且给了一个很好的库,它已经完成了所有工作。我只是想确保我更好地理解它并学习一些关于加密的知识,因为它不是我感到满意的东西。在我这样做的时候,我在一些网站上看到了一个测试,它说要调用这个Cipher.getMaxAllowedKeyLength("AES")
来给你最大的密钥长度。结果是128。
无论如何,最大允许密钥长度为128,这是否意味着我不能使用AES256?还是那些无关的?
编辑:我应该提一下,我确实知道如何让无限制的政策文件改变这一点,我只是想在继续之前更好地理解这一整个交易。
答案 0 :(得分:4)
对于US export restriction reasons,Java默认只提供128位安全性。如果要使用256位+安全性,则需要下载并安装Java Cryptography Extension。
答案 1 :(得分:3)
仅为此目的引入了getMaxAllowedKeyLength()
,否则您必须在Cipher
加密/解密操作(update
和doFinal
)期间处理异常测试是否适用限制。由于策略文件可能会及时更改或针对不同版本的Java,因此使用方法进行测试更容易。
请注意,getMaxAllowedKeyLength()
不应用于测试限制之外的任何其他原因。值得注意的是,它可能会返回Integer.MAX_VALUE
而不是有效的密钥大小。
当然,如果它返回128,则不能使用密钥大小为256的AES。
要解决此问题,您需要为Oracle JRE / JDK安装Unlimited Strength Jurisdiction Policy Files,然后将其复制到您想要的所有Java安装的(jre
)/lib/security
文件夹中。使用更大的密钥大小。您可以覆盖已存在的文件。您可能需要该文件夹的本地管理员权限或类似权限才能执行此操作。
如果不可能,您可以使用不需要Cipher
类的AES的另一种实现,因为此类实际上强制执行限制。有are a few tricks around this issue as well。