使用ulisesbocchio对spring-boot项目properties.yml(bootstrap.yml)配置文件加密

本文介绍了如何在Spring-boot项目中使用jasypt对properties文件中的密码进行加密,确保敏感信息的安全。通过添加maven依赖、执行加密命令、修改配置文件并设置启动参数,实现了密码的加密存储。同时,作者警告了将加密盐直接写在配置文件中的风险,并通过代码实验验证了其可逆性,强调了正确配置的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring-boot项目中properties文件中的密码明文上传到公开的远程仓库后,不安全,可以使用Ulisesbocchio对配置文件进行加密

1.添加maven依赖:

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

2.进入本地maven库 .m2\repository\org\jasypt\jasypt\1.9.2路径下,执行加密命令:

java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=aaaaaa password=111111 algorithm=PBEWithMD5AndDES

执行命令后会出现加密后密码:
在这里插入图片描述
3.将properties.yml(bootstrap.yml)配置文件中需要加密的数据替换成 ”ENC(密文)” :

spring:
  application:
    name: client
  cloud:
    nacos:
      discovery:
        username: admin
        password: ENC(MsvjXO4LXZ18GP2WoONZNA==)
        server-addr: ${NACOS_HOST:127.0.0.1}:${NACOS_POST:8848}
        group: DEFAULT_GROUP
        namespace: ${NACOS_NAMESPACE:dev}
        enabled: true
        register-enabled: true

4 将我们的加密盐放到项目的idea启动项中、和启动命令的启动项中

配置项中

  --jasypt.encryptor.password=111111

在这里插入图片描述
启动项中:

 java -jar test-0.0.1-SNAPSHOT.jar --jasypt.encryptor.password=111111

5 启动项目、运行代码正常!



注意: 网上有很多人将盐配置到了配置文件中,像下边:

jasypt:
  encryptor:
    password: 1111111111
    
spring:
  application:
    name: client
  cloud:
    nacos:
      discovery:
        username: admin
        password: ENC(MsvjXO4LXZ18GP2WoONZNA==)
        server-addr: ${NACOS_HOST:127.0.0.1}:${NACOS_POST:8848}
        group: DEFAULT_GROUP
        namespace: ${NACOS_NAMESPACE:dev}
        enabled: true
        register-enabled: true

我认为这样和没有进行加密是一样的,稍微费点事一样可以获取到密码(因为其加密算法是可逆的),为此我做了以下实验:

import org.jasypt.util.text.BasicTextEncryptor;

public class EncryptConfigUtil {
    public static void main(String[] args) {
        String salt = "111111"; // 盐值
        String password = "aaaaaa";      // 被加密的密码

        BasicTextEncryptor encryptor = new BasicTextEncryptor();
        encryptor.setPassword(salt);
        // 验证利用配置文件中配置的密文和盐值获取的明文
        String decryptedMessage1 = encryptor.decrypt("MsvjXO4LXZ18GP2WoONZNA==");
        System.out.println("利用配置文件中配置的密文和盐值获取的明文 -->" + decryptedMessage1);
        
        // 加密
        String encryptedMessage = encryptor.encrypt(password);
        System.out.println("密文 -->" + encryptedMessage);
        // 解密
        String decryptedMessage = encryptor.decrypt(encryptedMessage);
        System.out.println("明文 -->" + decryptedMessage);
    }
}

运行结果:
在这里插入图片描述
你看,是不是就拿到了呢!

详细原理可以查看源码:
org.jasypt.util.text.BasicTextEncryptor与org.jasypt.encryption.pbe.StandardPBEStringEncryptor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值