1. 概述
在这个教程中,我们将了解为什么Java加密扩展(JCE)的不限制强度策略文件默认情况下不总是启用。此外,我们将解释如何检查加密强度,并展示如何在不同版本的Java中启用不限制的加密。
2. JCE不限制强度策略文件
让我们理解一下什么是加密强度。它由发现密钥的难度定义,这取决于使用的密码和密钥长度。通常,更长的密钥提供更强的加密。有限的加密强度使用最大128位的密钥,而不限制的则使用最大长度为2147483647位的密钥。
众所周知,JRE本身包含加密功能。JCE通过司法管辖区策略文件来控制加密强度。策略文件由两个jar文件组成:local_policy.jar 和 US_export_policy.jar。因此,Java平台内置了对加密强度的控制。
3. 为何默认不包含JCE不限制强度策略文件
首先,只有较旧版本的JRE不包含不限制强度策略文件。 JRE的8u151及更早版本仅包含有限策略文件。相反,从Java 8u151开始,JRE会提供不限制和有限策略文件。原因很简单,一些国家要求限制加密强度。 如果一个国家的法律允许不限制的加密强度,那么根据Java版本,可以将它们打包或启用。
4. 如何检查加密强度
让我们看看如何检查加密强度。我们可以通过检查最大允许的密钥长度来进行:
int maxKeySize = javax.crypto.Cipher.getMaxAllowedKeyLength("AES");
如果返回值为128,则表示使用有限策略文件。反之,如果返回值为2147483647,则说明JCE使用了不限制策略文件。
5. 策略文件的位置
对于Java 8u151及更早版本,策略文件位于JAVA_HOME/jre/lib/security目录中。
从8u151版本开始,JRE提供了不同的策略文件集。 因此,在JRE目录JAVA_HOME/jre/lib/security/policy中有两个子目录:limited 和 unlimited。第一个包含有限强度策略文件,第二个包含不限制的策略文件。
6. 如何启用不限制强度加密
现在,让我们来看看如何启用最大加密强度。根据使用的Java版本,有多种方法可以实现。
6.1. 在Java 8u151之前的处理
在8u151版本之前,JRE只包含有限强度策略文件。 我们需要从Oracle网站下载不限制版本的替换。
首先,我们从这里下载Java 8的相关文件。接下来,我们解压下载的包,其中包含local_policy.jar 和 US_export_policy.jar。
最后,我们将这些文件复制到JAVA_HOME/jre/lib/security目录下。
6.2. 在Java 8u151及更高版本的处理
在Java 8u151及以上版本中,JCE框架默认使用不限制强度策略文件。此外,如果我们想指定使用哪个版本,有一个安全属性crypto.policy:
:
Security.setProperty("crypto.policy", "unlimited");
我们必须在JCE框架初始化之前设置这个属性。 它定义了JAVA_HOME/jre/lib/security/policy目录下的策略文件目录。
首先,当安全属性未设置时,框架会检查JAVA_HOME/jre/lib/security的旧版位置查找策略文件。尽管在新版本的Java中,旧版位置默认没有策略文件,但JCE仍然会检查它以保持与旧版本的兼容性。
其次,如果在旧版位置找不到jar文件且未定义属性,则JRE默认使用不限制策略文件。
7. 总结
在这篇简短的文章中,我们了解了JCE的不限制强度策略文件。首先,我们探讨了为什么在旧版本Java中不限制加密强度默认不启用。接着,我们学会了通过检查最大密钥长度来确定加密强度的方法。最后,我们看到了在不同Java版本中如何启用它。
如往常一样,示例代码的源代码可在GitHub上找到。