java加密与解密的艺术(六)——java加密组件的权限解禁及第三方插件支持

(写在前面的话:之前负责了一个关于数据安全接入的模块,涉及到了数据的加密解密,文件校验,下载落地,入库等。在wannercry肆虐之际,更深刻体会到数据安全的重要意义。鉴于此,不才受邀在今天给团队成员统一普及了一下数据安全方面的概念,重点给Java同事分享了一下基于Java的数据加密解密实现和梁栋的《java加密与解密的艺术》。有感于这次的wannercry风暴,特将今天的培训整理出来和大家分享一下,诚邀勘误指正。 培训资料:参考了梁栋的《java加密与解密的艺术》,大家也可以自行买这本书阅读,应该感谢梁栋为我们提供了一本好书。)


一、java加密组件的权限解禁


         受 sun 公司的进出口限制,java默认JDK或JRE中加密组件的安全强度不够(秘钥长度受限)以及某些算法(MD4等)不予支持,在不受进出口限制的国家地区拓展使用时,需要在 sun 官网下载无政策限制权限文件。

        需要注意的是不同版本JDK/JRE需要下载与之对应的无政策限制权限文件。jce8下载链接如下:

http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html


        将其中的jar文件替换掉 %java_home%/lib/security/ 下对应的jar文件;替换掉 %java_home%/jre/lib/security/ 下对应的jar文件。


       默认java组件不支持 AES 秘钥长度 256 ,解禁是否成功,可以通过下述代码验证 AES 秘钥长度 256 是否能否生成,若解禁失败,则会抛出异常java.security.InvalidKeyException。

KeyGenerator.getInstance("AES").init(256);

二、第三方加密组件 Bouncy Castle


1、环境搭建

       java自带的加密组件的加密强度或算法往往不能够满足我们的应用需求,我们可以通过开源组织提供的第三方家组件来拓展java的加密性能。只需要引入相关jar包即可,maven配置如下:

<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.57</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-ext-jdk15on -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-ext-jdk15on</artifactId>
    <version>1.57</version>
</dependency>


2、组件调用

       

         在初始化秘钥生成器等各类引擎类前,调用如下代码:

/**
 * 注册第三方加密组件BouncyCastle
 */
Security.addProvider(new BouncyCastleProvider());

3、提供的工具类


  • Base64
  • URLBase64
  • Hex十六进制转换工具


三、Commons Codec辅助工具


           该工具是有apache开源组织提供的,并没有对java组件拓展新的算法或者提高加密强度,仅仅是做了相应的工具封装,使得java加密组件的应用更简洁好用。


1、提供了Base64转换工具

2、提供了Base64InputStream

3、提供了Base64OutputStream

4、提供了Hex十六进制转换工具

5、提供了DigestUtils消息摘要算法的封装工具类



猜你喜欢

转载自blog.csdn.net/stefan_xiepj/article/details/72598312