SpringBoot 集成 Jasypt 对数据库加密以及踩坑(转载)

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

加依赖

com.github.ulisesbocchio jasypt-spring-boot-starter 3.0.3 1 2 3 4 5 加配置 # jasypt 密码加密配置 jasypt: encryptor: # 加密盐值 password: jasypt # 加密算法设置 3.0.0 以后 algorithm: PBEWithMD5AndDES iv-generator-classname: org.jasypt.iv.NoIvGenerator 1 2 3 4 5 6 7 PS:可以看到配置中特意配置了加密算法,原因是官方在 3.0.0 以后更改了加密算法,所以假如你不设置的话,使用网上的方法加密出来的密码启动就会报错,如图:

在这里插入图片描述

官方 issue:Failed to bind properties under ‘spring.datasource.password’ to java.lang.String` #154
在这里插入图片描述

版本在 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?utm_medium=distribute.pc_feed.none-task-blog-personrec_tag-3.nonecase&depth_1-utm_source=distribute.pc_feed.none-task-blog-personrec_tag-3.nonecase&request_id=5f1ff6559cc79f6252ce4728

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值