Java 8u161+及主流OpenJDK默认支持无限制加密强度,无需手动配置JCE;若Cipher.getMaxAllowedKeyLength("AES")返回128,需升级JDK或旧版中替换local_policy.jar和US_export_policy.jar。

Java自带加密能力,无需额外“安装”JCE(Java Cryptography Extension),但需确认运行环境支持高强度加密算法(如AES-256、RSA-2048),尤其在旧版JDK中可能受限。
检查JDK版本与默认JCE策略
从JDK 8u161、JDK 9起,Oracle JDK已默认启用无限制强度加密策略(Unlimited Strength Jurisdiction Policy),不再需要手动替换JCE策略文件。可通过代码验证:
import javax.crypto.Cipher;
public class JceCheck {
public static void main(String[] args) throws Exception {
int maxKeyLen = Cipher.getMaxAllowedKeyLength("AES");
System.out.println("AES最大密钥长度:" + maxKeyLen); // 输出应为2147483647(即无限制)
}
}
若输出为128,说明仍受限制,需升级JDK或(仅限JDK 8u160及更早)手动配置。
旧版JDK(≤8u160)的JCE策略文件替换
仅适用于必须使用老JDK且需AES-256等强算法的场景:
立即学习“Java免费学习笔记(深入)”;
- 下载对应JDK版本的JCE Unlimited Strength Jurisdiction Policy Files(如JDK 8对应“jce_policy-8.zip”)
-
解压后,将red">local_policy.jar和US_export_policy.jar复制到
$JAVA_HOME/jre/lib/security/目录下(覆盖原文件) - 重启Java应用使策略生效
使用OpenJDK时的注意事项
主流OpenJDK发行版(如Adoptium、Amazon Corretto、Red Hat OpenJDK、Zulu)自发布日起默认支持无限制加密强度,无需额外操作。可直接运行上述验证代码确认。
常见问题排查
- “Illegal key size”异常:多因JDK版本过低或策略文件未正确覆盖,优先升级JDK
-
找不到Cipher算法:确认拼写(如"RSA/ECB/PKCS1Padding"),部分算法需指定Provider(如
Cipher.getInstance("AES/GCM/NoPadding", "SunJCE")) -
运行时用的是JRE而非JDK:检查
java -version和System.getProperty("java.home")是否指向预期路径
基本上就这些。现代Java开发中,只要用JDK 8u161+或任一主流OpenJDK,加密环境开箱即用,重点是写对算法参数、选好Provider、注意密钥安全生成与存储。










