99网
您的当前位置:首页Jasypt 数据库及中间件密码加解密

Jasypt 数据库及中间件密码加解密

来源:99网

9一、引入jar包

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

二、新增JasyptUtils工具类

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

public class JasyptUtils {
    /**
     * 加密
     *
     * @param password 配置文件中设定的加密盐值
     * @param value    加密值
     * @return 加密后的字符串
     */
    public static String encrypt(String password, String value) {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        encryptor.setConfig(encrypt(password));
        return encryptor.encrypt(value);
    }

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

    /**
     * 配置,对应yml中的配置
     *
     * @param password 盐值
     * @return SimpleStringPBEConfig
     */
    public static SimpleStringPBEConfig encrypt(String password) {
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        //设置盐值
        config.setPassword(password);
        //设置算法
        config.setAlgorithm("PBEWithMD5AndDES");
        config.setKeyObtentionIterations("1000");
        config.setPoolSize("1");
        config.setProviderName("SunJCE");
        config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setStringOutputType("base");
        return config;
    }


    public static void main(String[] args) {
        // 加密 salt 盐 建议采用MD5加密
        String userNameEncryptStr = encrypt("salt", "root");
        String passwordEncryptStr = encrypt("salt", "root");
        System.out.println("加密后:" + userNameEncryptStr);
        System.out.println("加密后:" + passwordEncryptStr);
        // 解密 salt 盐
        String userNameDecryptStr = decrypt("salt", userNameEncryptStr);
        String passwordDecryptStr = decrypt("salt", passwordEncryptStr);
        System.out.println("解密后:" + userNameDecryptStr);
        System.out.println("解密后:" + passwordDecryptStr);
    }
}

三、修改application.yml

spring:
  datasource:
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/zipkin?serverTimezone=GMT&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
    #username: root
    #password: root
    username: ENC(jw1V2fEkHpAhwskUUssbm/St79Hn0Nve)
    password: ENC(jw1V2fEkHpAhwskUUssbm/St79Hn0Nve)

jasypt:
  encryptor:
    # 密码盐值(自定义)
    password: salt
    # 加密算法设置
    algorithm: PBEWithMD5AndDES
    iv-generator-classname: org.jasypt.iv.RandomIvGenerator
    salt-generator-classname: org.jasypt.salt.RandomSaltGenerator

将加密后密码替换值yml文件ENC()括号内

因篇幅问题不能全部显示,请点此查看更多更全内容