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 密文)

两种方法获得正确的明文密码

  1. 保留yml中jasypt配置(虽然可以直接启动项目,但是属于掩耳盗铃,因为密钥暴露在配置里)

  2. 删除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就是盐值