Cipher.getMaxAllowedKeyLength(“AES”)返回128,如果我想做AES256,这意味着什么

时间:2014-06-09 21:33:51

标签: java encryption aes

我被告知要使用AES256加密一些表单数据(字符串),并且给了一个很好的库,它已经完成了所有工作。我只是想确保我更好地理解它并学习一些关于加密的知识,因为它不是我感到满意的东西。在我这样做的时候,我在一些网站上看到了一个测试,它说要调用这个Cipher.getMaxAllowedKeyLength("AES")来给你最大的密钥长度。结果是128。

无论如何,最大允许密钥长度为128,这是否意味着我不能使用AES256?还是那些无关的?

编辑:我应该提一下,我确实知道如何让无限制的政策文件改变这一点,我只是想在继续之前更好地理解这一整个交易。

2 个答案:

答案 0 :(得分:4)

对于US export restriction reasons,Java默认只提供128位安全性。如果要使用256位+安全性,则需要下载并安装Java Cryptography Extension

答案 1 :(得分:3)

仅为此目的引入了getMaxAllowedKeyLength(),否则您必须在Cipher加密/解密操作(updatedoFinal)期间处理异常测试是否适用限制。由于策略文件可能会及时更改或针对不同版本的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