一、使用背景
项目中application.yml 配置文件中,如数据库、redis、加密算法的私钥等各种配置的username,password的值都是明文的,其实存在一定的安全隐患,如果被人拿到这些配置文件,将直接对系统安全构成极大威胁,为了加密敏感配置,我们可以使用jasypt 的方式进行明文加密。
二、cmd命令行使用
jasypt.jar包下载地址: https://repo1.maven.org/maven2/org/jasypt/jasypt/1.9.2/jasypt-1.9.2.jar
加密命令
java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="root" password=123456Ab algorithm=PBEWithMD5AndDES
input为你的明文密码。
password为盐值。
algorithm 是一个规则,请勿更改
加密过程和结果
解密命令
java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input=bTd6xo3JQbyO4PO2iUWVNQ== password=123456Ab algorithm=PBEWithMD5AndDES
input为你的明文密码。
password为盐值。
algorithm 是一个规则,请勿更改
三、Java代码使用
项目中引入依赖 在pom.xml里面添加下面内容
<!-- jasypt -->
<dependency>
<groupId>org.jasypt</groupId>
<artifactId>jasypt</artifactId>
<version>1.9.2</version>
</dependency>
上代码JsyptUtil.java
package com.jasypt.tool;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
public class JsyptUtil {
public static void main(String[] args) {
String s = encryptPassword("123456Ab", "root");
System.out.println("root加密后:" + s);
String salt = decryptPassword("123456Ab", s);
System.out.println("root解密后:" + salt);
}
public static SimpleStringPBEConfig encryJsypt(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 String encryptPassword(String password, String value) {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = encryJsypt(password);
encryptor.setConfig(config);
String resutl_encrypt = encryptor.encrypt(value);
return resutl_encrypt;
}
/*
* 解密操作
*/
public static String decryptPassword(String password, String value) {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = encryJsypt(password);
encryptor.setConfig(config);
String result_decrypt = encryptor.decrypt(value);
return result_decrypt;
}
}
运行结果