JAVA项目中对配置文件敏感信息进行加密

本文介绍了如何在SpringBoot项目中使用jasypt工具包对数据库连接的用户名、密码等敏感信息进行加密,增强应用的安全性。通过在`application.properties`中配置加密密钥,测试用例生成加密字符串,并在实际配置中使用加密后的信息。同时,还提到了在部署时通过命令行参数或环境变量设置盐值,进一步提升安全性。
摘要由CSDN通过智能技术生成

背景介绍:在我们的配置文件中有一些信息比较敏感,明文显示,安全性就比较低一些,比如数据库的用户名与密码,对此本文我们以SpringBoot项目为例将对用户名与密码进行加密!

案例

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

jasypt由一个国外大神写了一个springboot下的工具包,用来加密配置文件中的信息。

  1. application.properties或application.yml配置加/解的密码
# jasypt加密密钥
jasypt:
  encryptor:
    password: EbfYkitulv73I2p0mXI50JMXoaxZTKJ7
  1. 在写的测试用例中生成加密后的秘钥
/**
 * @Auther: chenmy
 * @Date: 2022/02/25/16:11
 * @Description: 如有不懂关注公众号-> 码农明明 
 *               获取整个项目源码,提出疑问
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class SuccessTest {
    @Autowired
    private StringEncryptor encryptor;

    @Test
    public void getPass() {
        String url = encryptor.encrypt("jdbc:mysql://127.0.0.1:3306/kkb?autoReconnect=true&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8");
        String name = encryptor.encrypt("root");
        String password = encryptor.encrypt("cmyroot");
        System.out.println("database url: " + url);
        System.out.println("database name: " + name);
        System.out.println("database password: " + password);
        Assert.assertTrue(url.length() > 0);
        Assert.assertTrue(name.length() > 0);
        Assert.assertTrue(password.length() > 0);
    }
}

下面是输出加密字符串:

database url: 2UdKxOVXnPB6ZfsUOUEIFaEMLVzJnOzHKFOuacjdrImiNSuMGbWbR5G/0viQmtHvimD2CutZ/y7bLiOx3ewH/O3h6jGztEzNx/m1i0aP9CFTOuYkPvf6NFnbA0zbU8L4a6QsFdVLG5IFBWz+41sBIKCyZBY4eSnj92lvYftTiFA=
database name: qKVR5YJQIrG3iytBWFyYEg==
database password: 2D2yCkM3ws7CLL7VXxs0aA==
  1. 将加密后的字符串替换原明文
spring:
  jpa:
    #指定是否在spring启动时创建表,默认false
    generate-ddl: true
    show-sql: true
    #指定应用重启后不重新更新表内容
    hibernate:
      ddl-auto: none
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver
    url: ENC(hA3JGlwMIqw8oGU9SqU7lxPuQT3qGL65gMhy77YV2fv0OeMe3pOW1rwx5M9ekWLoIOPKyiuIDBobtW8Y37/LwJ7d5NJtpBnhUwIK9Q6r3mZbispO9mKzkZxcxcVMp6kEmCDWD4TO93DO6bXjqSyLWn8zM0ge/9n2zOAgz+bz/bM=)
    username: ENC(ddKnhp/x0Jck5A1b/TxLVA==)
    password: ENC(hEuvGUnB6SBhT3jkVv8caA==)
#注意: 上面的 ENC() 是固定写法.

# jasypt加密密钥
jasypt:
  encryptor:
    password: EbfYkitulv73I2p0mXI50JMXoaxZTKJ7

明文密码加密成功!
如有不懂或者疑问请关注公众号:码农明明
即可获取项目源码并提出疑问
在这里插入图片描述

附言

部署时配置salt(盐)值

为了防止salt(盐)泄露,反解出密码.可以在项目部署的时候使用命令传入salt(盐)值:

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

或者在服务器的环境变量里配置,进一步提高安全性.

打开/etc/profile文件

vim /etc/profile

profile文件末尾插入salt(盐)变量

export JASYPT_PASSWORD = Y6M9fAJQdU7jNp5MW

编译,使配置文件生效

source /etc/profile

运行

java -jar -Djasypt.encryptor.password=${JASYPT_PASSWORD} xxx.jar
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值