网络编程
位置:首页>> 网络编程>> 数据库>> SpringBoot 集成 Jasypt 对数据库加密以及踩坑的记录分享

SpringBoot 集成 Jasypt 对数据库加密以及踩坑的记录分享

作者:乐之终曲  发布时间:2024-01-24 11:14:48 

标签:SpringBoot,Jasypt,数据库,加密

前言

密码安全是非常重要的,因此我们在代码中往往需要对密码进行加密,以此保证密码的安全

加依赖


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

加配置


# jasypt 密码加密配置
jasypt:
encryptor:
# 加密盐值
password: jasypt
# 加密算法设置 3.0.0 以后
algorithm: PBEWithMD5AndDES
iv-generator-classname: org.jasypt.iv.NoIvGenerator

PS:可以看到配置 * 意配置了加密算法,原因是官方在 3.0.0 以后更改了加密算法,所以假如你不设置的话,使用网上的方法加密出来的密码启动就会报错,如图:

SpringBoot 集成 Jasypt 对数据库加密以及踩坑的记录分享

官方 issue:Failed to bind properties under ‘spring.datasource.password' to java.lang.String` #154

SpringBoot 集成 Jasypt 对数据库加密以及踩坑的记录分享

版本在 3.0.0 之前的 Jasypt

需要额外添加 Jasypt 的加密盐值配置到 Tomcat


-Djasypt.encryptor.password=xxxx

工具类

如果你想手动使用 Jasypt 进行加解密


import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;

public class JasyptUtil {

/**
 * Jasypt生成加密结果
 * @param password 配置文件中设定的加密盐值
 * @param value 加密值
 * @return
 */
public static String encyptPwd(String password,String value){
 PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
 encryptor.setConfig(cryptor(password));
 String result = encryptor.encrypt(value);
 return result;
}

/**
 * 解密
 * @param password 配置文件中设定的加密盐值
 * @param value 解密密文
 * @return
 */
public static String decyptPwd(String password,String value){
 PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
 encryptor.setConfig(cryptor(password));
 String result = encryptor.decrypt(value);
 return result;
}

public static SimpleStringPBEConfig cryptor(String password){
 SimpleStringPBEConfig config = new SimpleStringPBEConfig();
 config.setPassword(password);
 config.setAlgorithm("PBEWithMD5AndDES");
 config.setKeyObtentionIterations("1000");
 config.setPoolSize("1");
 config.setProviderName("SunJCE");
 config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
 config.setStringOutputType("base64");
 return config;
}

public static void main(String[] args) {
 // 加密
 String encPwd = encyptPwd("jasypt", "123456");
 // 解密
 String decPwd = decyptPwd("jasypt", encPwd);
 System.out.println(encPwd);
 System.out.println(decPwd);
}
}

数据库配置解密

用官方提供的保留字 ENC,将加密的密码包裹即可


spring:
datasource:
url: jdbc:mysql://xx.xx.xx.xx/xxxx?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: ENC(加密后的密码)
driver-class-name: com.mysql.jdbc.Driver

来源:https://blog.csdn.net/qq_37143673/article/details/107563064

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com