SpringBoot项目使用Jasypt加密库给数据库加密

SpringBoot项目使用Jasypt加密库给数据库加密
彼岸的風需求说明
项目中会有使用配置文件来存放敏感信息(比如数据库密码、redis等),但生产环境中如果采用明文配置将会有安全问题。为了消除安全隐患,最直接的方式就是把明文敏感信息加密,解密。Jasypt 框架提供了很好的解决方案。
Jasypt 简介
Jasypt 是一个Java库,Java加密包,用于加密和解密敏感数据,它允许开发人员以很简单的方式添加基本加密功能,且无需深入研究加密原理。
Jasypt的功能特性
- 安全性高
- 线程安全
- 配置性能高
- 跨语言平台等
- 详细介绍请见Jasypt官网
在SpringBoot项目中如何使用Jasypt
添加Jasypt依赖
1
2
3
4
5<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>yml配置文件
1
2
3jasypt:
encryptor:
bean: fu99999EncryptorBean配置文件中是以bean的方式注入,在启动类中添加jasypt的bean给数据库进行加密
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
static public StringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword("windOfGrace");// 加密的密钥,随便自己填写
config.setAlgorithm("PBEWithMD5AndDES");// 加密的算法,这个算法是默认的
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
return encryptor;
}写一个工具类或者写个main方法执行下需要加密的数据库地址
1
2
3
4
5public static void main(String[] args) {
System.out.println(stringEncryptor().encrypt("jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8"));
System.out.println(stringEncryptor().encrypt("root"));
System.out.println(stringEncryptor().encrypt("123456"));
}把加密之后的秘钥配置到数据库地址中,注意格式ENC(秘钥)
1
2
3
4
5
6
7spring:
jackson:
time-zone: GMT+8
datasource:
url: ENC(Oxpc++igRsuJSCMb4cNJiN7tpna46QcTpDOMpjEd51lWpaYEELJ6asrk7jCmEHtlDaQ1GsDQ+B8VtdnQ1gg6w3uZ81a6KkGocQluWOuqmXI2yf5LQ0/r2d6LWN9FuqoqOeICVUcbmxY=)
username: ENC(ytrxf1igA4bazqZ6TOOc1A==)
password: ENC(j/o7k6nZe+yAMoWVWRnjFg==)
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果