有人告诉我使用AES256加密某些表单数据(字符串),并提供了一个不错的库,它已经可以完成所有工作。我只是想确保自己对它有所了解,并从中学习了一些有关加密的知识,因为这是我永远都不会感到满意的。在进行此测试时,我在某个网站上看到了一个测试,称要调用此Cipher.getMaxAllowedKeyLength("AES")
可以为您提供最大的 key 长度。结果是128。
无论如何,最大允许的 key 长度是128,这是否意味着我不能使用AES256?还是那些无关的?
编辑:我应该提一下,我确实知道如何获取无限制的策略文件来更改此设置,我只是想在继续之前更好地了解这整个过程。
最佳答案
仅为此目的引入了getMaxAllowedKeyLength()
,否则,您将不得不在Cipher
加密/解密操作(update
和doFinal
)期间处理一个异常,以测试限制是否适用。由于策略文件可能会随时间变化或针对Java的不同版本而变化,因此使用一种方法进行测试更容易。
请注意,除了测试限制之外,不应将getMaxAllowedKeyLength()
出于任何其他原因使用。值得注意的是,它很可能返回Integer.MAX_VALUE
而不是有效的 key 大小。
当然,如果返回128,则不能使用 key 大小为256的AES。
为了解决这个问题,您需要为Oracle JRE/JDK安装Unlimited Strength Jurisdiction Policy Files,然后将其复制到要使用较大 key 大小的所有Java安装的(jre
)/lib/security
文件夹中。您可以覆盖已经存在的文件。您可能需要在该文件夹上具有本地管理员权限或类似权限。
如果不可能,则可以使用不需要Cipher
类的另一种AES实现,因为该类实际上会强制执行这些限制。有are a few tricks around this issue as well。