【Jasypt】SpringBoot配置文件加密

2024-01-03 11:41:55

1、加密介绍

在yml配置文件中会存在一些敏感数据,比如用户名,密码,第三方应用的密钥等等。这些信息是以明文的形式出现在文件中,存在较大安全隐患。Jasypt(Java Simplified Encryption)是一个Java库,可以很方便的对yml文件中的敏感信息加密处理。本文是介绍在SpringBoot项目中运用Jasypt的基础案例。

2、代码实现加解密

(1) 引入pom依赖

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

(2) 编写Jasypt的yml配置文件

# 加密配置
jasypt:
  encryptor:
    # 指定加密密钥,生产环境建议放到启动参数
    password: your-secret
    # 指定解密算法,需要和加密时使用的算法一致
    algorithm: PBEWithMD5AndDES
    # 指定initialization vector类型
    iv-generator-classname: org.jasypt.iv.NoIvGenerator

(3) 基于jasypt编写加解密工具类

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

/**
 * 加解密工具类
 */
public class EncrypDecryptUtil {

    /**
     * 设置加解密时的基础参数,与yml配置文件保持一致 
     * @param password
     * @return
     */

    public static SimpleStringPBEConfig config(String password){
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(password);
        config.setAlgorithm(StandardPBEByteEncryptor.DEFAULT_ALGORITHM); // 设置加解密算法
        config.setPoolSize(1); // 设置连接池大小
        config.setStringOutputType("base64"); // 设置输出类型 
        return config;
    }

    /**
     * 加密
     * @param password 加密时使用的密码
     * @param value 需要加密的值
     * @return
     */
    public static String encypt(String password, String value){
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        encryptor.setConfig(config(password));
        String encrypt = encryptor.encrypt(value);
        return encrypt;
    }

    /**
     * 解密
     * @param password 解密时使用的密码
     * @param value 需要解密的值
     * @return
     */
    public static String decypt(String password, String value) {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        encryptor.setConfig(config(password));
        String decrypt = encryptor.decrypt(value);
        return decrypt;
    }

    // 测试
    public static void main(String[] args) {
        String salt = "HelloKitty";
        // 加密
        String encypt = EncrypDecryptUtil.encypt(salt, "root123");
        System.out.println("encypt = " + encypt);
        // 解密
        String decypt = EncrypDecryptUtil.decypt(salt, encypt);
        System.out.println("decypt = " + decypt);
    }
}

3、使用说明

  • 在引入依赖,编写对应的yml配置信息后,将敏感信息加密成密文,替换之前的明文信息。替换时,需要在密文前面加上ENC(代表解密标识),并且将密文放在小括号里。 当要用到对应的密文时,Jasypt会自动进行解密操作。

文章来源:https://blog.csdn.net/qq_45110186/article/details/135357920
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。