应用场景
随着互联网的不断发展,人们对信息安全越来越重视,各个公司对一些敏感信息的加密要求也越来越高。最近边肖的公司要求项目配置文件中不能出现明文密码,并且要求配置文件中出现的用户名密码要加密。边肖用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=CSEbfabcctulv73I2dsssCTTJMXoaxZTKJ7jasypt.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;@RestControllerpublic 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==)
请求解密接口(其实是自动解密的)获取解密后的用户名和密码。
为什么这里解密的用户名是86177而不是lyj?
解决方法:将配置文件中配置项的变量名改为另一个名称(只要不是username),例如:
newUsername=ENC(H8W+D5hYuGkMNJEXOz/tdQ==)password=ENC(JOyjEvb1yc0IOnKc39ynGQ==)
再问很正常。
注意了。
配置项名称不要定义为username,否则解密后为86177由于密钥也是写在配置文件里,所以为了更安全,密钥可以放在启动脚本或者环境变量里
如果需要获取源代码,请注意。谢谢您们。
