Pig4Cloud之jasypt 配置文件加密

2022-12-07 14:11:30 浏览数 (2)

## 简介

Jasypt是一个Java简易加密库,用于加密配置文件中的敏感信息,如数据库密码。jasypt库与springboot集成,在实际开发中非常方便。

## 引入Jasypt依赖

```

<dependency>

<groupId>com.github.ulisesbocchio</groupId>

<artifactId>jasypt-spring-boot-starter</artifactId>

<version>2.1.0</version>

</dependency>

```

## 配置使用

将加密后的配置信息使用ENC函数,添加到配置文件中,应用启动加载配置文件时,会自动解密。

Jasypt默认使用的算法为PBEWithMD5AndDES,该算法需要一个加密密钥,可以在应用启动时指定。也可以直接写入配置文件,安全性稍差。

```

jasypt:

encryptor:

password: password

```

注意:这里指定加密密钥为password

## 工具类

```

package com.keafmd.springdemo.utils;

import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;

import org.jasypt.encryption.pbe.StandardPBEByteEncryptor;

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

/**

* Keafmd

*

* @ClassName: JasyptUtils

* @Description:

* @author: 牛哄哄的柯南

* @date: 2022-04-25 11:18

*/

public class JasyptUtils {

/**

* Jasypt生成加密结果

*

* @param password 配置文件中设定的加密密码 jasypt.encryptor.password

* @param value 待加密值

* @return

*/

public static String encryptPwd(String password, String value) {

PooledPBEStringEncryptor encryptOr = new PooledPBEStringEncryptor();

encryptOr.setConfig(cryptOr(password));

String result = encryptOr.encrypt(value);

return result;

}

/**

* 解密

*

* @param password 配置文件中设定的加密密码 jasypt.encryptor.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;

}

/**

* @param password salt

* @return

*/

public static SimpleStringPBEConfig cryptOr(String password) {

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;

}

public static void main(String[] args) {

// 加密

// 盐值替换成自己熟悉的口令,此口令为解密密钥,需要妥善保管。

// 盐值也需要在第三步写入配置文件

System.out.println(encryptPwd("keafmd", "123456"));

}

}

```

## 修改配置文件

把明文密码替换为工具类生成的密文,并用ENC()包着

```

datasource:

master:

url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai

username: root

password: ENC(r7PD0 haO/ALC txojmG/A==)

driver-class-name: com.mysql.cj.jdbc.Driver

```

0 人点赞