Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java getMaxAllowedKeyLength(“AES”)返回128,如果要执行AES256,这意味着什么_Java_Encryption_Aes - Fatal编程技术网

Java getMaxAllowedKeyLength(“AES”)返回128,如果要执行AES256,这意味着什么

Java getMaxAllowedKeyLength(“AES”)返回128,如果要执行AES256,这意味着什么,java,encryption,aes,Java,Encryption,Aes,我被告知使用AES256对一些表单数据(字符串)进行加密,并得到了一个很好的库,它已经完成了这一切。我只是想确保我能更好地理解它,并学习一点关于加密的知识,因为我从来都不喜欢它。在这样做的时候,我运行了一个在某个网站上看到的测试,它说调用这个Cipher.getMaxAllowedKeyLength(“AES”),它给出了最大密钥长度。结果是128 无论如何,允许的最大密钥长度是128,这是否意味着我不能使用AES256?或者这些是无关的 编辑:我应该提到,我确实知道如何获得无限的政策文件来改变

我被告知使用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键长度进行加密?谢谢