应用场景
随着互联网的不断发展,信息安全越来越被人们所重视,各个公司对一些敏感信息的加密要求也越来越高,最近小编的公司就要求项目配置文件里不能出现明文密码,要求对配置文件里出现的用户名密码进行加密处理,小编使用了jasypt轻松搞定,在这里也推荐给大家!
使用方式
pom文件里引入依赖
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
application.properties配置文件里添加密钥
jasypt.encryptor.password=CSEbfabcctulv73I2dsssCTTJMXoaxZTKJ7
jasypt.encryptor.algorithm=PBEWithMD5AndDES
创建测试类ApiController,对外提供加密,解密方法
package com.lyj.properties.encrypt.controller;
import org.jasypt.encryption.StringEncryptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RestController
public class ApiController {
@Autowired
StringEncryptor encryptor;
@Value("${username}")
private String username;
@Value("${password}")
private String password;
/**
* 解密
* @author: liyajie
* @date: 2022/1/12 10:27
* @param
* @return java.util.List<java.util.Map<java.lang.String,java.lang.String>>
* @exception:
* @update:
* @updatePerson:
**/
@GetMapping("/getUsernameAndPassword")
public Map<String,String> getUsernameAndPassword(){
Map<String,String> map = new HashMap<String,String>();
map.put("解密后username",username);
map.put("解密后password",password);
return map;
}
/**
* 加密
* @author: liyajie
* @date: 2022/1/12 10:27
* @param
* @return java.util.Map<java.lang.String,java.lang.String>
* @exception:
* @update:
* @updatePerson:
**/
@GetMapping("/setUsernameAndPassword")
public Map<String,String> setUsernameAndPassword(String username, String password){
Map<String,String> map = new HashMap<String,String>();
map.put("加密后username",encryptor.encrypt(username));
map.put("加密后password",encryptor.encrypt(password));
return map;
}
}
测试
加密
将加密后的用户名密码添加到配置文件中
username=ENC(H8W+D5hYuGkMNJEXOz/tdQ==)
password=ENC(JOyjEvb1yc0IOnKc39ynGQ==)
请求解密接口(其实是自动解密的),获取解密后的用户名和密码
这里解密后的username为啥是86177,而不是lyj?
解决方法:
将配置文件里的配置项的变量名称修改为其他的名字(只要不是username就可以),例如:
newUsername=ENC(H8W+D5hYuGkMNJEXOz/tdQ==)
password=ENC(JOyjEvb1yc0IOnKc39ynGQ==)
再次请求就正常了
注意点
- 配置项名称不要定义为username,否则解密后为86177
- 由于密钥也是写在配置文件里,所以为了更安全,密钥可以放在启动脚本或者环境变量里