一、前言

        小永哥过往的工作经历中,有一件事情记忆深刻,起因是客户要求配置文件中不允许出现明文的数据库用户名和密码,需要加密,客户的要求非常有道理,将数据库登录信息配置成密文有助于提升系统的安全性。废话不多说,盘它。

二、实现步骤

2.1、在工程的pom文件中引入第三方依赖包

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

2.2、自定义一个秘钥并做好记录,后期需要通过这个秘钥将数据库用户名和密码进行加解密。

(没有什么要求,随便指定一个就行,可能123就是个不错的选择)

2.3、基于秘钥将数据库敏感信息加密,加密完记得解密一下保证密文是可用的。

package com.relation.test;

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;

/**
 * @author huhy
 * @version 1.0
 * @Description:
 * @ClassName Date:2025/2/26 22:05
 */
public class Demo {
    public static void main(String[] args) {
        StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
        //配置文件中配置如下的算法
        standardPBEStringEncryptor.setAlgorithm("PBEWithMD5AndDES");
        //配置文件中配置的password
        standardPBEStringEncryptor.setPassword("miyao");
        //要加密的文本
        String name = standardPBEStringEncryptor.encrypt("root");
        String password = standardPBEStringEncryptor.encrypt("123456");
        //将加密的文本写到配置文件中
        System.out.println("name=" + name);
        System.out.println("password=" + password);
        //要解密的文本
        String name2 = standardPBEStringEncryptor.decrypt(name);
        String password2 = standardPBEStringEncryptor.decrypt(password);
        //解密后的文本
        System.out.println("name2=" + name2);
        System.out.println("password2=" + password2);
    }
}

2.4、更改配置文件

2.4.1、用密文形式的用户名和密码替换掉明文,切记要使用ENC()包起来,否则无法解密。

2.4.2、将秘钥、加密算法等信息也配置到配置文件

三、验证

3.1、本地启动项目,此次给数据库连接信息加密算是验证成功。

风险:本地环境验虽然可以启动,但是本地环境将秘钥和加密方式等都放到了配置文件,如果配置文件泄露,密文已然免不了泄露,正式环境还需要另谋出路。

3.2、解决秘钥存在配置文件存在的风险

3.2.1、先将秘钥信息从配置文件中删除

3.2.2、将秘钥参数设置到启动命令中,通过命令启动服务

命令:java -jar relation-admin.jar --jasypt.encryptor.algorithm=PBEWithMD5AndDES --jasypt.encryptor.password=miyao --jasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator

3.2.3、通过命令启动使配置文件不再出现敏感信息,大大保证了敏感信息的安全性,以此类推还可以将redis、mq等连接信息也进行加密。

四、结语

        本次小永哥分享了配置文件敏感信息加密方案,后边陆续还会记录一些关于redis的使用方式及场景,希望可以和大家一起进步,谢谢。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐