Java getMaxAllowedKeyLength(“AES”)返回128,如果要执行AES256,这意味着什么
我被告知使用AES256对一些表单数据(字符串)进行加密,并得到了一个很好的库,它已经完成了这一切。我只是想确保我能更好地理解它,并学习一点关于加密的知识,因为我从来都不喜欢它。在这样做的时候,我运行了一个在某个网站上看到的测试,它说调用这个Java getMaxAllowedKeyLength(“AES”)返回128,如果要执行AES256,这意味着什么,java,encryption,aes,Java,Encryption,Aes,我被告知使用AES256对一些表单数据(字符串)进行加密,并得到了一个很好的库,它已经完成了这一切。我只是想确保我能更好地理解它,并学习一点关于加密的知识,因为我从来都不喜欢它。在这样做的时候,我运行了一个在某个网站上看到的测试,它说调用这个Cipher.getMaxAllowedKeyLength(“AES”),它给出了最大密钥长度。结果是128 无论如何,允许的最大密钥长度是128,这是否意味着我不能使用AES256?或者这些是无关的 编辑:我应该提到,我确实知道如何获得无限的政策文件来改变
Cipher.getMaxAllowedKeyLength(“AES”)
,它给出了最大密钥长度。结果是128
无论如何,允许的最大密钥长度是128,这是否意味着我不能使用AES256?或者这些是无关的
编辑:我应该提到,我确实知道如何获得无限的政策文件来改变这一点,我只是想在继续之前更好地理解整个交易 对于,Java在默认情况下仅提供128位安全性。如果要使用256位以上的安全性,则需要下载并安装。引入的
getMaxAllowedKeyLength()
正是出于此目的,否则您将不得不在密码
加密/解密操作期间处理异常(更新
和doFinal
)测试这些限制是否适用。由于策略文件可能会随着时间或Java的不同版本而更改,因此使用方法进行测试更容易
请注意,getMaxAllowedKeyLength()
不应用于测试限制以外的任何其他原因。值得注意的是,它很可能返回Integer.MAX_VALUE
,而不是有效的键大小
当然,如果返回128,则不能使用密钥大小为256的AES
要解决此问题,您需要为Oracle JRE/JDK安装,然后将其复制到所有Java安装的(
JRE
)/lib/security
文件夹中,在该文件夹中您要使用更大的密钥大小。您可以覆盖已经存在的文件。您可能需要本地管理员权限或该文件夹的类似权限才能执行此操作
如果这是不可能的,您可以使用另一个AES实现,它不需要
Cipher
类,因为该类实际上实施了限制。那里。我不确定API中没有明确说明这其中的哪一部分,但确实如此。只是要明确一点,例外情况会发生在哪里?在初始化加密库时,执行getMaxAllowedKeyLength()
的代码具有以下内容KeyGenerator kgen=KeyGenerator.getInstance(“AES”);kgen.init(256)代码>之后,它似乎加密得很好,尽管getMaxAllowedKeyLength()
返回了128。我只是想在向上级汇报之前确保我对这一点有更好的理解。在使用Cipher
类(而不是由提供者实现的CipherSpi
类)时,会出现密钥大小大于允许值的异常。我已经更新了答案以包含此信息。您链接的页面说这是由于导入限制,而不是导出限制。因此,请确认,即使代码看起来是这样的:KeyGenerator kgen=KeyGenerator.getInstance(“AES”);kgen.init(256)
但是方法getMaxAllowedKeyLength()
返回128,这意味着它只使用128键长度而不是256键长度进行加密?谢谢