在Java中启用无限强度加密

2023/07/02

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中有2个子目录: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上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章