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

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

内容简介:由于出口限制等方面的原因,在受限情况下如果使用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");


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

查看所有标签

猜你喜欢:

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

Java常用算法手册

Java常用算法手册

2012-5 / 59.00元

《Java常用算法手册》分三篇,共13章,分别介绍了算法基础、算法应用和算法面试题。首先介绍了算法概述,然后重点分析了数据结构和基本算法思想;接着,详细讲解了算法在排序、查找、数学计算、数论、历史趣题、游戏、密码学等领域中的应用;最后,列举了算法的一些常见面试题。书中知识点覆盖全面,结构安排紧凑,讲解详细,实例丰富。全书对每一个知识点都给出了相应的算法及应用实例,虽然这些例子都是以Java语言来编......一起来看看 《Java常用算法手册》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

MD5 加密
MD5 加密

MD5 加密工具