Java SE 8u151、8u152 和 8u162 中的 JCE 策略更改

本文介绍了Java 8u162版本开始默认启用无限制加密策略,不再需要手动下载和安装策略文件以支持192位和256位AES密钥。在此之前,超过128位的密钥长度会导致InvalidKeyException。用户可以通过设置`crypto.policy`属性为`unlimited`来启用无限制策略,或者在`java.security`文件中取消注释相应行。从Java 9开始,这一策略已是默认设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2018 年 1 月 16 日更新:Oracle 发布了 Java 8 u162。在此版本中,默认启用无限制策略。您不再需要在 JRE 中安装策略文件或设置安全属性crypto.policy


当您使用 Java Cryptography Extension (JCE) 时,您可能已经知道开箱即用的 Java 运行时对特定的密钥长度参数实施了限制。

当您查看以下使用 AES 加密和解密字符串的程序时,当您使用 128 位 ( keyGen.init(128, random);)的密钥长度时,它可以正常工作。

byte[] input = "My super secret text".getBytes();

SecureRandom random = SecureRandom.getInstanceStrong();
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128, random);
SecretKey key = keyGen.generateKey();

Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "SunJCE");
byte[] iv = new byte[12];
random.nextBytes(iv);
GCMParameterSpec spec = new GCMParameterSpec(128, iv);
cipher.init(Cipher.ENCRYPT_MODE, key, spec);
byte[] cipherText = cipher.doFinal(input);

// Decrypt
cipher.init(Cipher.DECRYPT_MODE, key, spec);
byte[] plainText = cipher.doFinal(cipherText);
System.out.println(new String(plainText));

但是当您将密钥长度更改为 192 ( keyGen.init(192, random);) 或 256 ( keyGen.init(256, random);) 位时,java 运行时会抛出异常:

Exception in thread "main" java.security.InvalidKeyException: Illegal key size

要解决这个问题,你必须去这个网站,下载无限强度管辖权政策文件,解压,进入<java-home>/lib/security目录,将两个文件local_policy.jarUS_export_policy.jar下载的两个文件替换。

通过此更改,您现在可以毫无例外地使用密钥大小为 192 和 256 的 AES。

此行为在Java 8的u151u152版本中发生了变化。从该版本开始,不再需要从 Oracle 网站下载策略文件并进行安装。您现在可以使用此单行程序直接在您的应用程序中设置无限制策略:

Security.setProperty("crypto.policy", "unlimited");

确保在初始化 JCE 框架之前运行此代码。

或者,您可以在<jre_home>/lib/security/java.security文件中设置无限制策略,而无需更改任何应用程序。搜索该行#crypto.policy=unlimited并删除该#字符以取消注释。

Java 9 开始,该策略默认设置为无限制,因此当您使用最新的 Java 版本时,您无需更改任何内容或向程序添加任何代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值