JCE无限制权限策略文件

因为某些国家的进口管制限制,Java发布的运行环境包中的加解密有一定的限制。比如默认不允许256位密钥的AES加解密,解决方法就是修改策略文件。

对于Java 8 Update 144和更早版本,需要安装Java密码学扩展(JCE)无限强度管辖权策略文件:

  1. 此处下载无限强度的JCE策略文件
  2. 解压缩下载的文件
  3. $JAVA_HOME/jre/lib/security提取的无限强度策略JAR文件替换现有的策略JAR文件

注意:如果您以后决定恢复到原始的受限策略版本,请首先在中备份原始JCE策略文件(US_export_policy.jar和local_policy.jar)$JAVA_HOME/jre/lib/security

Java 8 Update 151及更高版本

包括了“无限强度管辖策略”,但默认情况下不使用。要启用它,您需要java.security$JAVA_HOME/jre/lib/security(对于JDK)或$JAVA_HOME/lib/security(对于JRE)中编辑文件取消注释(或包括)该行:

crypto.policy=unlimited

官方网站提供了JCE无限制权限策略文件的下载:

JDK6的下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html

JDK7的下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html

JDK8的下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

使用反射修改JDK关键代码

//这里是通过反射移除了isRestricted 的变量修饰符:final
//然后将isRestricted 赋值为false即可
static {
   //break JCE crypto policy limit
   try {
       Class<?> clazz = Class.forName("javax.crypto.JceSecurity");
       Field nameField = clazz.getDeclaredField("isRestricted");
Field modifiersField
= Field.class.getDeclaredField("modifiers"); modifiersField.setAccessible(true); modifiersField.setInt(nameField, nameField.getModifiers() & ~Modifier.FINAL); nameField.setAccessible(true); nameField.set(null, java.lang.Boolean.FALSE); } catch (Exception ex) { ex.printStackTrace(); } }

 

posted @ 2020-09-10 20:27  如.若  阅读(4147)  评论(0编辑  收藏  举报