简介

最近隔离在家,做项目中发现项目中的配置文件敏感信息都是明文存储的的,很不安全。例如:数据库的密码,redis的密码,oss存储的相关key等等。

然后自己也上网百度了下相关的资料。找到了一个开源的配置文件加密实现:jasypt

jasypt

开源地址:asypt-spring-boot

官网:http://www.jasypt.org

jasypt的使用

引入依赖

gradle:

compile group: 'com.github.ulisesbocchio', name: 'jasypt-spring-boot-starter', version: '3.0.4'

maven:

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

修改配置文件

# 配置文件加密密码(必输)
jasypt.encryptor.password=123
# 3.0以上版本,下面这两项必须设置
jasypt.encryptor.algorithm=PBEWithMD5AndDES
jasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator

加密字符并替换

编写测试类,生成加密字符
package com.unfbx.gradle_test;

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

/**
 * 描述:
 *
 * @author
 * @date 2022-04-06
 */
public class Test {

    public static void main(String[] args) {
        // jasypt.encryptor.password=123
        String salt = "123";
        //待加密文本
        String password = "123456";
        PooledPBEStringEncryptor stringEncryptor = new PooledPBEStringEncryptor();
        stringEncryptor.setConfig(cryptOr(salt));
        String encryptStr = stringEncryptor.encrypt(password);
        System.out.println(encryptStr);
    }

    public static SimpleStringPBEConfig cryptOr(String password) {
        //jasypt 默认的加密方式
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(password);
        config.setAlgorithm(StandardPBEByteEncryptor.DEFAULT_ALGORITHM);
        config.setKeyObtentionIterations("1000");
        config.setPoolSize("1");
        config.setProviderName(null);
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setStringOutputType("base64");
        return config;
    }
}
输出加密文本
cRYimzBiTWER5G03myGgTw==
替换
# pgsql
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/postgis_test
spring.datasource.username=postgres
# 替换的密文默认“ENC(”开头,“)” 结尾
# 可自定义,github文档有说明
spring.datasource.password=ENC(M97tssJr1p6k9gvW3AH00w==)

启动测试

简单写个数据库查询接口测试下,数据库密码加密后是否生效,直接返回解密后的密码。

@Value("${spring.datasource.password}")
private String dbPassword;

@GetMapping("/db_password")
public String dbVersion(){
    return dbPassword;
}

接口返回解密后的密码

后续还是要看一下源码,来了解下实现原理。

本文源码地址:

文章目录