Springboot配置文件中账号密码等敏感信息的加解密

说明:

  • 使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性比较低。
  • 打开application.properties或application.yml,比如MySQL登录密码,Redis登录密码以及第三方的密钥等等一览无余。
  • 这里介绍一个加解密组件jasypt,用以提高配置文件中敏感配置数据的安全性。
  • 本文以数据库连接URL、用户名和数据库密码加密为例。

一,引入Maven依赖

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

说明:
1)这里使用的是2.1.0版本的jasypt-spring-boot-starter。
2)目前jasypt-spring-boot-starter的最新版本是3.0.5。版本不同,配置可能也不一样,请以官网为准。本文的配置,仅供2.1.0版本参考。

二,application.yml配置文件中增加如下内容(加解密时使用)

#jasypt加密的密钥
jasypt:
  encryptor:
    property:
      prefix: "enc@["
      suffix: "]"
    #生产环境中,jasypt.encryptor.password不能与密文放在一起
    #可以通过系统属性、命令行参数或环境变量传递
    password: EbfYkitulv73I2p0mXI50JMXoaxZTKJ7

说明:

  • 上面的password必须自己定义,其他都可以不配置,因为有默认配置(见下表)。
  • 在生产环境中,jasypt.encryptor.password不能与密文放在一起,我们可以在项目当中通过系统属性、命令行参数或环境变量传递。
  • jasypt默认使用ENC(),()里面是加密后的信息。这里我配置成enc@[],即,[]里面是加密后的配置数据。可以不配置。
默认配置
KeyRequiredDefault Value
jasypt.encryptor.passwordTrue-
jasypt.encryptor.algorithmFalsePBEWITHHMACSHA512ANDAES_256
jasypt.encryptor.key-obtention-iterationsFalse1000
jasypt.encryptor.pool-sizeFalse1
jasypt.encryptor.provider-nameFalseSunJCE
jasypt.encryptor.provider-class-nameFalsenull
jasypt.encryptor.salt-generator-classnameFalseorg.jasypt.salt.RandomSaltGenerator
jasypt.encryptor.iv-generator-classnameFalseorg.jasypt.iv.RandomIvGenerator
jasypt.encryptor.string-output-typeFalsebase64
jasypt.encryptor.proxy-property-sourcesFalsefalse
jasypt.encryptor.skip-property-sourcesFalseempty list

三,创建测试类,用以生成加密后的秘钥

import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;

public class JasyptTest {
    public static void main(String args[]) {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();

        //设置加密密码,请和配置文件中的保持一致,默认会添加随机盐
        config.setPassword("EbfYkitulv73I2p0mXI50JMXoaxZTKJ7");

        //设置pool size
        config.setPoolSize(1);

        encryptor.setConfig(config);

        String url = encryptor.encrypt("jdbc:mysql://192.168.111.88:3306/testdb?allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true");
        String name = encryptor.encrypt("你的数据库账号");
        String password = encryptor.encrypt("你的数据库密码");
        System.out.println("数据库连接URL----------------" + url);
        System.out.println("数据库账号----------------"+ name);
        System.out.println("数据库密码----------------" + password);
    }
}

下面是加密后的输出结果

数据库连接URL----------------GxNAlIqGJiGaufrvrxtCS2udohjUDRyGTCNv1iuK+I2zTNK1OjVEAn0kK3tjjoIS9LPTJMiXJNuPma1fFtA6Kydaq0/qfAOOOnZS9dVNiiOneXYCy0CXwFW21HeuqQMSXicz6K6mTUjTSXoLt3BedTeuMBAjIrMvzPyBAxXpKaTGIHWJayu2o+T1IRbkMWOP4c+ruUB57E2SXSrgcvI2n4yq2jK84/Y3VV3HlwnuEdxNlc54P9v+u8cP5F7EmgcZzqONAEGd1o4=
数据库账号----------------7JpTbrd7hOStIks6Nih3vA==
数据库密码----------------kCNP4+yhce5nF+3c+tR3ww==

四,将上面生成的url、name和password替换配置文件中的数据库连接url、数据库账户和密码

spring:
  #数据库相关配置
  datasource:
    url: enc@[GxNAlIqGJiGaufrvrxtCS2udohjUDRyGTCNv1iuK+I2zTNK1OjVEAn0kK3tjjoIS9LPTJMiXJNuPma1fFtA6Kydaq0/qfAOOOnZS9dVNiiOneXYCy0CXwFW21HeuqQMSXicz6K6mTUjTSXoLt3BedTeuMBAjIrMvzPyBAxXpKaTGIHWJayu2o+T1IRbkMWOP4c+ruUB57E2SXSrgcvI2n4yq2jK84/Y3VV3HlwnuEdxNlc54P9v+u8cP5F7EmgcZzqONAEGd1o4=]
    username: enc@[7JpTbrd7hOStIks6Nih3vA==]
    password: enc@[kCNP4+yhce5nF+3c+tR3ww==]

#jasypt加密的密钥
jasypt:
  encryptor:
    property:
      prefix: "enc@["
      suffix: "]"
    password: EbfYkitulv73I2p0mXI50JMXoaxZTKJ7

到此,我们就实现了Springboot配置文件里的敏感信息加密。

五、参考链接

  • 47
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值