使用jasypt工具包给springboot项目敏感信息加密

前言

在我们的应用程序,为了防止hardcode,通常会把程序中可能会变的,或者与环境相关的信息抽离出来,从而形成配置文件。SpringBoot配置文件中的内容通常情况下是明文显示,安全性就比较低一些。在application.properties或application.yml文件中,往往含有比较敏感的信息,比如mysql登连接信息,redis登陆密码以及各种第三方的**等等。这些数据一旦泄露,造成的影响将是非常巨大的。

jasypt简介

jasypt全称是Java Simplified Encryption,一个用于加密的Java类库,是一个国外的大神写的工具包,特点是:

  • 基于标准的加密算法,支持单向加密与反向加解密

  • 与Hibernate可以无缝集成

  • 适用于使用Spring应用的基础,与SpringSecurity可以实现无缝集成

  • 提供加密应用的配置文件的集成

  • 提供多处理器/多核系统中高性能加密的特定功能

  • 开放与任何JCE(Java Cryptography Extension)实现相同的API

如何使用呢?

第一步 :项目中加入依赖包

<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>

使用jasypt工具包给springboot项目敏感信息加密

第二步:生成密文

随便写一个测试类,定义一个main方法,内容如下,其中www.jiagou1216.com是秘钥(也成为盐值),可以为任意字符。

使用jasypt工具包给springboot项目敏感信息加密

package com.afip;
import org.jasypt.util.text.BasicTextEncryptor;
/**
 * @author :架构师小跟班
 * @date :Created in 2019/11/14 0014 20:29
 * @description:
 * @modified By:www.jiagou1216.com
 */
public class Encryptor {
    public static void main(String[] args) {
        BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
        textEncryptor.setPassword("www.jiagou1216.com");
        //加密
        String url = textEncryptor.encrypt("jdbc:mysql://192.168.1.12:3306/afip?useUnicode=true&characterEncoding=utf8");
        String name = textEncryptor.encrypt("root");
        String password = textEncryptor.encrypt("123456");
        System.out.println("密文:" + url);
        System.out.println("密文:" + name);
        System.out.println("密文:" + password);
        //解密
        String durl = textEncryptor.decrypt(url);
        String dname = textEncryptor.decrypt(name);
        String dpassword = textEncryptor.decrypt(password);
        System.out.println("反译:" + durl);
        System.out.println("反译:" + dname);
        System.out.println("反译:" + dpassword);
    }
}

执行main方法生成密文,多执行几次会发现生成的密文每次都不一样,但是同一个原文生成的不同密文反译后都是一样的

使用jasypt工具包给springboot项目敏感信息加密

第三步:修改配置文件application-dev.yml

1)添加秘钥

使用jasypt工具包给springboot项目敏感信息加密

2)修改需要加密的配置项,其中ENC()为固定写法,括号里的内容为上面生成的密文。

使用jasypt工具包给springboot项目敏感信息加密

如果说你的盐值(jasypt.encryptor.password)写在配置文件中不安全可以使用以下两个办法:

1)可以在项目部署的时候使用命令传入salt(盐)值

java -jar -Djasypt.encryptor.password=www.jiagou1216.com xxx.jar

2)在服务器的环境变量里配置,进一步提高安全性

vim /etc/profile

文件末尾插入

export JASYPT_PASSWORD = www.jiagou1216.com

编译 

source /etc/profile

运行 

java -jar -Djasypt.encryptor.password=${JASYPT_PASSWORD} xxx.jar

结束

jasypt的强大远不止于此,本章只是介绍了该工具最基础的用法,更多功能还是需要读者自己去探索。