数据库明文链接

本文介绍了如何使用Jasypt库与SpringBoot集成,通过命令行和Java代码生成加密数据字符串,然后在配置文件中使用加密后的敏感信息,如数据库连接的用户名和密码。讨论了不同方式设置盐值、算法,包括在yml/properties文件、代码内以及通过JVM参数,确保生产环境的安全性。

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

目录

与springboot集成

1、引入jar包:

 2、 生成加密数据字符串:

2.1 命令行加密

 2.2 java 代码

3、 配置文件中使用

4、关于Jasypt敏感配置存放位置(盐值、算法等)

4.1 yml或properties文件中 (简单但不安全)

4.2 代码内配置

4.3 JVM参数方式


开发和测试环境还好,但生产如果采用明文配置会有安全问题,一般都是经过加密的;

今天主要讲的是使用Jasypt库完成数据库敏感信息加密;

Jasypt 是一个 java 库,它允许开发人员以最小的努力将基本的加密功能添加到他/她的项目中,而无需深入了解密码学的工作原理。
· 高安全性、基于标准的加密技术,适用于单向和双向加密。加密密码、文本、数字、二进制文件…
· 适合集成到基于Spring的应用程序中,也可以与Spring Security透明地集成。
· 用于加密应用程序(即数据源)配置的集成功能
· 多处理器/多核系统中高性能加密的特定功能。

官网: Jasypt: Java simplified encryption - Jasypt: Java simplified encryption - Main

与springboot集成

1、引入jar包:

–这里以3.0.3版本,对应的jasypt版本 1.9.3

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

 2、 生成加密数据字符串:

这里介绍两种:
· 命令行
· java代码

2.1 命令行加密

进入到本地jar 包仓库,使用cmd 或者 git bash 工具

加密:

java -cp ./jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI password=salt algorithm=PBEWithMD5AndTripleDES input=password

该命令将使用密码 pkslow 和加密算法 PBEWithMD5AndTripleDES 对字符串 password 进行加密。加密后的结果将显示在命令行窗口中,由于其使用的是PBEWithMD5AndDES加密方式,所以每次加密出来的结果都不一样,但是解密都是一样的。
解密:

java -cp ./jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI p                                                  assword=salt algorithm=PBEWithMD5AndTripleDES input=yZ+fSk2aKpbveRDOGHbIRzPVX5AT

该命令将使用密码 salt 和解密算法 PBEWithMD5AndTripleDES 对字符串 yZ+fSk2aKpbveRDOGHbIRzPVX5AT 进行解密。解密后的结果将显示在命令行窗口中。

命令描述:

  • -cp ./jasypt-1.9.3.jar:通过指定 -cp 参数设置 Jasypt 库的类路径。这告诉 Java 虚拟机在运行命令时加载 jasypt-1.9.3.jar 文件。

  • org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI:指定要执行的主类。这是 Jasypt 库提供的命令行界面类。

  • password=salt:设置加密操作的密码。在这个例子中,密码设置为 salt(尽量复杂)。

  • algorithm=PBEWithMD5AndTripleDES:指定要使用的加密算法。在这个例子中,使用 PBEWithMD5AndTripleDES 算法进行加密。

  • input=password:指定要加密的输入字符串。在这个例子中,要加密的字符串是 password

加密示例:

 

 2.2 java 代码

package com.jfsoft.interfaces.utils;

import lombok.extern.slf4j.Slf4j;
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

/**
 * @描述:
 * @Date: 2023/4/9
 * @Description: // PC002
 **/
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
public class CsPeisTest {

    @Test
    public void testEncyptedPassword() {
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
        //config.setPasswordEnvName("PLATFORM_KEY");
        config.setAlgorithm("PBEWithMD5AndDES");
        config.setPassword("salt");
        encryptor.setConfig(config);
        String name = "sa";
        String password = "123456";
        //对敏感数据加密
        log.info("name>>>{} 加密后>>{}", name, encryptor.encrypt(name));
        log.info("password>>>{} 加密后>>{}", name, encryptor.encrypt(password));
        log.info("name 解密后>>{}", encryptor.decrypt(encryptor.encrypt(name)));
        log.info("password  解密后>>{}", encryptor.decrypt(encryptor.encrypt(password)));
    }

}

输出 

name>>>sa 加密后>>ZzS0VVbgIL7zQXbMcwTcyg==
password>>>123456 加密后>>jqNNNEzhU6ZUquYSDzKciw==
name 解密后>>sa
password  解密后>>123456

3、 配置文件中使用

只需要使用默认的前缀 ENC()包裹,括号内就是加密后的字符

spring.datasource.dynamic.datasource.sqlserver.url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ceshi
spring.datasource.dynamic.datasource.sqlserver.username=ENC(ZzS0VVbgIL7zQXbMcwTcyg==)
spring.datasource.dynamic.datasource.sqlserver.password=ENC(jqNNNEzhU6ZUquYSDzKciw==)
spring.datasource.dynamic.datasource.sqlserver.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver



jasypt.encryptor.password=salt
jasypt.encryptor.algorithm=PBEWithMD5AndDES
jasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator

4、关于Jasypt敏感配置存放位置(盐值、算法等)

4.1 yml或properties文件中 (简单但不安全)

jasypt.encryptor.password=salt

4.2 代码内配置

    @Bean("jasyptStringEncryptor")
    public StringEncryptor stringEncryptor1() {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword("d947a954-salt");
        config.setAlgorithm("PBEWithMD5AndTripleDES");
        config.setKeyObtentionIterations("1000");
        config.setPoolSize(Runtime.getRuntime().availableProcessors());
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator");
        config.setStringOutputType("base64");
        encryptor.setConfig(config);
        return encryptor;
    }

4.3 JVM参数方式

# 项目启动时,带入以下参数
-Djasypt.encryptor.password=salt

配置好后,直接启动项目即可,jasypt检测到ENC后会自动解密,快去试试吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值