springboot配置文件敏感信息加密

前言

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

Jasypt

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

其最核心的步骤就两个:

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

Jasypt示例

构建springboot项目,该示例是基于springboot版2.7.3,jdk17,jasypt版本是3.04

1.引入依赖


    com.github.ulisesbocchio
    jasypt-spring-boot-starter
    3.0.4

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=密钥(开发阶段)。项目上线了,运维会把密钥作为程序启动时的命令行参数来带入 。

展开阅读全文

页面更新:2024-03-13

标签:标识符   密钥   信息   示例   账号   字符   敏感   参数   密码   程序   项目

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top