您的位置 首页 java

springboot配置文件敏感信息加密

前言

一般情况下,配置文件会包含数据库账号密码、业务的一些密钥等重要的敏感信息,如果这些信息泄露,会产生严重后果,因此对这些敏感信息加密是必不可少的。

Jasypt

这 是一个 java 库,它允许开发人员以最小的努力将基本的加密功能添加到他/她的项目中,而无需深入了解 密码学 的工作原理 ,官网如下:

其最核心的步骤就两个:

  1. 添加jasypt依赖
  2. 添加配置

Jasypt示例

构建 spring boot项目,该示例是基于springboot版2.7.3, jdk 17,jasypt版本是3.04

1.引入依赖

 <dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.4</version>
</dependency>  

2.配置文件

这是数据库账号密码的一个配置

 spring.datasource.username= root 
spring.datasource.password=root  

现在需要对username和password进行加密,加密后的结果如下:

 spring.datasource.username=ENC(eIOQM9aChGP4/CQk7RXAM7ZSK7AIBI9faeQb31M5/ouChpMIDHlB2+uSsIaZmxQU)
spring.datasource.password=ENC(Y+tFn7NIUjXhUjtyfpDmI7EfL9ORPiRKSKrnxU+3wfFcHUo9cl2/wv4uAlc56lng)  

ENC()是jasypt的一个标识符

3.利用代码程序加密(写一个加密工具)

这是一个小demo,所有的项目都可以使用这个工具生成加密密码

核心代码如下:

 package com.xm.demo.common.jasypt;

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.iv.RandomIvGenerator;
import org.springframework.stereotype.Component;

@Component
public class Jasypt {
     private   static  final String PBEWITHMD5ANDDES = "PBEWithMD5AndDES";
    private static final String PBEWITHHMACSHA512ANDAES_256 = "PBEWITHHMACSHA512ANDAES_256";
    /**
     * 加密
     * @param str 加密的字符
     * @param salt 密钥
     * @return  java .lang.String
     */    public  String  encryption(String str,String salt){
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        encryptor.setPassword(salt);
        encryptor.setAlgorithm(PBEWITHHMACSHA512ANDAES_256);
        encryptor.setIvGenerator(new RandomIvGenerator());
        return encryptor.encrypt(str);
    }
    /**
     * 解密
     * @param str 解密的字符
     * @param salt 密钥
     * @return java.lang.String
     */    public String  decryption(String str, String salt){
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        encryptor.setPassword(salt);
        encryptor.setAlgorithm(PBEWITHHMACSHA512ANDAES_256);
        encryptor.setIvGenerator(new RandomIvGenerator());
        return encryptor.decrypt(str);
    }
}
  

4.添加配置参数

 jasypt.encryptor.password=demo  

这个配置是必须的,但这里有个问题就是,把加密的密钥放到配置文件里,如果泄露了,别人还是可以解密的,因此需要把这个配置放到别的地方去,当然开发阶段把密钥放到配置中是没有问题的。

方式一: 直接作为程序启动时的命令行参数来带入

 java -jar xxx.jar --jasypt.encryptor.password=demo  

方式二: 直接作为程序启动时的应用 环境变量 来带入

 java -Djasypt.encryptor.password=demo -jar xxx.jar  

5.jasypt配置扩展

 jasypt.encryptor.password=demo  #加密密钥
jasypt.encryptor.algorithm=PBEWITHHMACSHA512ANDAES_256 #加密算法(默认)
jasypt.encryptor.property.prefix=ENC( #标识符
jasypt.encryptor.property.suffix=) #标识符  

实际开发的流程是这样的:

运维提供加密后的信息和密钥,例如加密后的账号密码,然后开发人员只需要在 pom 文件中添加jaspyt依赖,以及配置文件中加上jasypt.encryptor.password=密钥(开发阶段)。项目上线了,运维会把密钥作为程序启动时的命令行参数来带入 。

文章来源:智云一二三科技

文章标题:springboot配置文件敏感信息加密

文章地址:https://www.zhihuclub.com/184740.shtml

关于作者: 智云科技

热门文章

网站地图