zoukankan      html  css  js  c++  java
  • 一场由jdk8小版本引起的血案

    在公司实现一个需求,其中需要实现AES加密敏感数据,开发ok,测试ok,流程全部跑通,一切ok,测试小姐姐还在抱怨没有bug可提完不成指标(哈哈,这tm还有指标)。
    合代码、上线!线上验证时,悲剧发生了。。。
    一个血淋淋的异常现场摆在面前:

     1 Caused by: java.lang.RuntimeException: java.security.InvalidKeyException: Illegal key size or default parameters
     2 at com.example.demo.AESUtil.encryptService(AESUtil.java:96)
     3 at com.example.demo.AESUtil.encrypt(AESUtil.java:70)
     4 at com.example.demo.DataEncUtil.encrypt(DataEncUtil.java:23)
     5 at com.example.demo.DemoApplication.main(DemoApplication.java:9)
     6 ... 8 more
     7 Caused by: java.security.InvalidKeyException: Illegal key size or default parameters
     8 at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1026)
     9 at javax.crypto.Cipher.init(Cipher.java:1245)
    10 at javax.crypto.Cipher.init(Cipher.java:1186)
    11 at com.example.demo.AESUtil.encryptService(AESUtil.java:92)
    12 ... 11 more

    卧槽,什么情况,紧急回退后再次review代码,没问题啊,主分支丢到测试环境还是那么完美。。。


    翻阅资料,发现,oracle(sun)在jdk中做了一些限制:
    在我们安装的JRE目录下有这样一个文件夹:%JAVE_HOME%jrelibsecurity,其中包含有两个.jar文件:“local_policy.jar ”和“US_export_policy.jar”
    因为美国的出口限制,Sun通过权限文件(local_policy.jar、US_export_policy.jar)做了相应限制。因此存在一些问题:
    ●密钥长度上不能满足需求(如:java.security.InvalidKeyException: Illegal key size or default parameters);
    ●部分算法未能支持,如MD4、SHA-224等算法;
    ●API使用起来还不是很方便;一些常用的进制转换辅助工具未能提供,如Base64编码转换、十六进制编码转换等工具。
    Sun被Oracle收购以后,Oracle在其官方网站上提供了无政策限制权限文件(Unlimited Strength Jurisdiction Policy Files),我们只需要将其部署在JRE环境中,就可以解决限制问题。
    JDK8 jar包下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
    JDK7 jar包下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
    JDK6 jar包下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html
    把里面的两个jar包:local_policy.jar 和 US_export_policy.jar 替换掉原来jdk安装目录%JAVE_HOME%jrelibsecurity 下的两个jar包接可以了。


    另外,在这篇文章中也得知jdk在.java 8 161以上已经不再限制密钥长度。回头看到测试机的版本在161以上,线上则是111,所以也就证实了这一分析。
    https://blog.csdn.net/tangtao_xp/article/details/84944049

  • 相关阅读:
    通讯录封装实现
    简单通讯录的实现 main..h .m文件全部
    iOS 开发 OC编程 字典和集合 排序方法
    iOS 开发 OC编程 数组冒泡排序.图书管理
    iOS 开发 OC编程 属性和字符串练习
    iOS 开发 OC编程 属性和字符串
    iOS 开发 OC编程 便利构造器以及初始化方法
    iOS 开发 OC编程 方法的书写
    IOS 开发 OC编程 类和对象
    iOS 开发 c语言阶段考试题
  • 原文地址:https://www.cnblogs.com/steve-jiang/p/11597160.html
Copyright © 2011-2022 走看看