摘抄千峰,基本上清楚,这里备注一下
一. jasypt介绍
Jasypt(Java Simplified Encryption)是一个Java库,它允许开发人员以最小的努力为项目添加基本的加密功能,而无需深入了解密码学的工作原理。
- 基于标准的高安全性加密技术,适用于单向和双向加密。加密密码,文本,数字,二进制文件...
- 与 Hibernate 的透明集成。
- 适合集成到基于 Spring 的应用程序中,也可以透明地与 Spring 安全性集成。
- 用于加密应用程序(即数据源)配置的集成功能。
- 多处理器/多核系统中高性能加密的特定功能。
- 开放 API 以与任何 JCE 提供程序一起使用。
- ......
二. SpringBoot项目中集成jasypt
- 基本用法
1.1 导入jar
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.4</version>
</dependency>
1.2 修改yml配置文件
jasypt:
encryptor:
# 加密的秘钥
password: haha
# 加密算法
algorithm: PBEWithMD5AndDES
iv-generator-classname: org.jasypt.iv.NoIvGenerator
property:
# 算法识别的前后缀,默认ENC(),包含在前后缀的加密信息,会使用指定算法解密
prefix: Enc(
suffix: )
jasypt3.0后,默认支持的算法为 PBEWITHHMACSHA512ANDAES_256 ,该算法需要JDK1.9 以上支持或者添加JCE(Java Cryptography Extension 无限强度权限策略文件)支持。本例使用PBEWithMD5AndDES算法。
1.3 生成加密后的数据
package com.qfedu.day76.utils;
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;
public class JasyptUtils {
public static void main(String[] args) {
String info = encrypt(root);
System.out.println(info);
}
/**
* 加密
*
* @param plaintext 明文
* @return
*/
public static String encrypt(String plaintext) {
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
// 指定算法
config.setAlgorithm(PBEWithMD5AndDES);
// 指定秘钥,和yml配置文件中保持一致
config.setPassword(haha);
encryptor.setConfig(config);
// 生成加密数据
return encryptor.encrypt(plaintext);
}
/**
* 解密
*
* @param data 加密后数据
* @return
*/
public static String decrypt(String data) {
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
config.setAlgorithm(PBEWithMD5AndDES);
config.setPassword(haha);
encryptor.setConfig(config);
// 解密数据
return encryptor.decrypt(data);
}
}
执行加密算法,加密后数据如下图所示:
替换yml中数据库的密码:
1.4 启动项目进行测试
OK,一切正常!
- 秘钥处理
将加密密码以明文形式写在配置文件中并不安全,实际开发中也不推荐这样使用。我们使用idea测试时,可以进行如下设置:
如果打包后部署项目,可以使用如下命令在启动项目时指定秘钥:
#方式1:
java -jar xxx.jar -Djasypt.encryptor.password=加密数据的秘钥
#方式2:
java -jar xxx.jar --jasypt.encryptor.password=加密数据的秘钥