jayspt介绍
jasypt是一个轻量的Java库,它允许开发人员以最小的努力为项目添加基本的加密功能,而无需深入了解密码学的工作原理。
省流:轻量,快速,Java库
jasypt特性
1. 提供简单的单向和双向加密
2. 为密码提供一定的安全性
3. 完全的线程安全
4. ...
jasypt应用
引入依赖
(下方有maven地址,建议安装使用人次多的,而不是最新的)
<!-- https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter -->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
这里需要注意加密的类型
2.1.2版本默认加密方式为:PBEWithMD5AndDES
3.0.3版本默认加密方式为:PBEWITHHMACSHA512ANDAES_256
yml中配置
可以用下面默认的情况
jasypt:
encryptor:
# password就是盐值
password: 123123
# 解密前缀 默认是ENC()
# prefix: "Y["
# suffix: "]"
生成密文(测试类中)
@Autowired
private StringEncryptor stringEncryptor;
@Test
void testJayspy() {
String username = stringEncryptor.encrypt("root");
String password = stringEncryptor.encrypt("password");
log.info("username 密文: " + username);
log.info("password 密文: " + password);
}
得到密文配置到yml文件中
yml中敏感数据解密
spring:
application:
name: xxx-backend
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/yovvis
username: ENC(usename 密文)
password: ENC(password 密文)
两种方法获得正确的明文密码
保留yml中jasypt配置(虽然可以直接启动项目,但是属于掩耳盗铃,因为密钥暴露在配置里)
删除jasypt添加虚拟机参数
-Djasypt.encryptor.password="xxxx"
代码提交
提交到仓库,删除盐值提交,然后启动项目可以自行补上盐值
spring:
application:
name: xxx-backend
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/yovvis
username: ENC(usename 密文)
password: ENC(password 密文)
jasypt:
encryptor:
# password就是盐值