配置文件加密无从下手——jasypt帮你轻松搞定

应用场景

随着互联网的不断发展,信息安全越来越被人们所重视,各个公司对一些敏感信息的加密要求也越来越高,最近小编的公司就要求项目配置文件里不能出现明文密码,要求对配置文件里出现的用户名密码进行加密处理,小编使用了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;
    }
}

测试

加密

image.png

将加密后的用户名密码添加到配置文件中

username=ENC(H8W+D5hYuGkMNJEXOz/tdQ==)
password=ENC(JOyjEvb1yc0IOnKc39ynGQ==)

请求解密接口(其实是自动解密的),获取解密后的用户名和密码

image.png

这里解密后的username为啥是86177,而不是lyj?

解决方法:
将配置文件里的配置项的变量名称修改为其他的名字(只要不是username就可以),例如:

newUsername=ENC(H8W+D5hYuGkMNJEXOz/tdQ==)
password=ENC(JOyjEvb1yc0IOnKc39ynGQ==)

再次请求就正常了

image.png

注意点

  1. 配置项名称不要定义为username,否则解密后为86177
  2. 由于密钥也是写在配置文件里,所以为了更安全,密钥可以放在启动脚本或者环境变量里
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容