java加密与解密的艺术(七)——因电子邮件传输诞生的Base算法家族

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


一、Base算法家族


         我们都知道电子邮件的传输需要进行Base64编码(为什么需要编码呢?电子邮件为什么要编码以及产生乱码的原因?http://www.cnblogs.com/thinker-lj/p/3865998.html),Base家族包括Base16、Base32、Base64(http://xiaoqin00.blog.51cto.com/10468367/1718416)。


        Base家族不属于严格意义上的加密算法,因为其不光算法公开,并且加密映射表也公开。但是Base算法诠释了最经典最基础的加密模型,如果我们对其映射表的映射规则稍作改动,则Base算法可用作弱加密系统。


二、Base64算法开发实现


         sun公司很奇特地没有公开提供Base64工具,虽然  sun.misc 包提供了 BASE64Encoder 和 BASE64Decoder 类实现,但这是Sun的专用API,所以不建议使用。毋庸置疑,开源第三方必然会给我们提供帮助。

       Bouncy Castle 和 Commons Codec 开源组件包都提供了实现,前者提供了一般的Base64算法实现,后者提供了基于 RFC 2045 定义的算法实现。


1、Bouncy Castle第三方插件实现


开发中我们采用 Bouncy Castle第三方插件实现很简单,一句代码即可搞定。

1.1、环境搭建:

            maven配置:

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


1.2、代码实现:

引入包:

 
 
import org.bouncycastle.util.encoders.Base64;

通常我们会定义字符编码常量,用来转码:

/**
 * 字符编码常量
 */
private static final String ENCODING = "UTF-8";

Base64加密:

/**
 * Base64加密
 */
byte[] base64Encode = Base64.encode(data.getBytes(ENCODING));

Base64解密:

/**
 * Base64解密
 */
byte[] base64Decode = Base64.decode(data.getBytes(ENCODING));


2、Commons Castle 第三方插件实现


2.1、环境搭建:

maven配置:

<!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.10</version>
</dependency>


2.2、代码实现:

引入包:

import org.apache.commons.codec.binary.Base64;

Base64加密:

/**
 * Base64加密
 */
byte[] encodeBase64 = Base64.encodeBase64(data.getBytes(ENCODING));

Base64解密:

/**
 * Base64解密
 */
byte[] decodeBase64 = Base64.decodeBase64(data.getBytes(ENCODING));

猜你喜欢

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