使用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>
第二步:生成密文
随便写一个测试类,定义一个main方法,内容如下,其中www.jiagou1216.com是秘钥(也成为盐值),可以为任意字符。
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方法生成密文,多执行几次会发现生成的密文每次都不一样,但是同一个原文生成的不同密文反译后都是一样的。
第三步:修改配置文件application-dev.yml
1)添加秘钥
2)修改需要加密的配置项,其中ENC()为固定写法,括号里的内容为上面生成的密文。
如果说你的盐值(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的强大远不止于此,本章只是介绍了该工具最基础的用法,更多功能还是需要读者自己去探索。