【小坑速记】JDK加解密Key长度限制

栏目: Java · 发布时间: 5年前

内容简介:由于出口限制等方面的原因,在受限情况下如果使用256位的key进行加解密,会报因此如果使用的稍旧的JDK版本,需要支持256位key的加解密根据JDK版本有以下方式,

由于出口限制等方面的原因, JDK 8u151 之前的版本限制了一些加密算法的key最大长度。 JDK 8u151 后提供了不限制的Policy可以通过修改配置或运行时来配置, JDK 8u161 之后默认使用了不限制的Policy。

在受限情况下如果使用256位的key进行加解密,会报 InvalidKeyException: Illegal key size ,如下:

java.security.InvalidKeyException: Illegal key size
	at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1038)
	at javax.crypto.Cipher.implInit(Cipher.java:804)
	at javax.crypto.Cipher.chooseProvider(Cipher.java:863)
	at javax.crypto.Cipher.init(Cipher.java:1395)
	at javax.crypto.Cipher.init(Cipher.java:1326)

因此如果使用的稍旧的JDK版本,需要支持256位key的加解密根据JDK版本有以下方式,

JDK 8u151之前的版本

需要替换 $JAVA_HOME/jre/lib/security 下面中 US_export_policy.jarlocal_policy.jar 两个文件,这2个文件中原始的内容如下,限制了各种算法的最大key的位数。

// local_policy.jar中内容
grant {
    permission javax.crypto.CryptoPermission "DES", 64;
    permission javax.crypto.CryptoPermission "DESede", *;
    permission javax.crypto.CryptoPermission "RC2", 128, 
                                     "javax.crypto.spec.RC2ParameterSpec", 128;
    permission javax.crypto.CryptoPermission "RC4", 128;
    permission javax.crypto.CryptoPermission "RC5", 128, 
          "javax.crypto.spec.RC5ParameterSpec", *, 12, *;
    permission javax.crypto.CryptoPermission "RSA", *;
    permission javax.crypto.CryptoPermission *, 128;
};

// US_export_policy.jar中内容
grant {
    // There is no restriction to any algorithms.
    permission javax.crypto.CryptoAllPermission; 
};

不同jdk版本替换文件的下载地址:

US_export_policy.jarlocal_policy.jar 两个文件复制到 $JAVA_HOME/jre/lib/security 下面。jar包中内容如下:

// US_export_policy.jar 和 local_policy.jar 都为以下内容
grant {
    // There is no restriction to any algorithms.
    permission javax.crypto.CryptoAllPermission; 
};

JDK 8u151到JDK 8u161之间的版本

JDK 8u151 之后的版本, $JAVA_HOME/jre/lib/security/policy 下有2个文件夹: limitedunlimited ,里面的文件分别对应有限制的Policy和无限制的Policy,有2种方式可以通过以下方式放开限制:

  • 修改JDK配置

    $JAVA_HOME/jre/lib/security/java.security 文件中的 crypto.policy 配置修改为 unlimited

  • 运行时修改

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

火球

火球

张传波 / 2012-2 / 39.80元

《火球:UML大战需求分析》融合UML、非UML、需求分析及需求管理等各方面的知识,帮助读者解决UML业界问题、需求分析及需求管理问题。全书主要介绍UML的基本语法、面向对象的分析方法、应用UML进行需求分析的最佳实践及软件需求管理的最佳实践四个方面的内容。 《火球:UML大战需求分析》各章以问题为引子,通过案例、练习、思考和分析等,由浅入深地逐步介绍UML综合应用的知识。《火球:UML大战......一起来看看 《火球》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具