SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)

本文主要是介绍SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)》本文介绍了如何在SpringBoot项目中使用Jasypt对application.yml文件中的敏感信息(如数...

SpringBoot使用Jasypt对YML文件配置内容进行加密(例:数据库密码加密)

前言

在SpringBoot的项目开发中,大多数情况下 yml 配置文件中存储的密码均以明文形式展示,这种方式显然存在较大的安全隐患。一旦有开发人员离职,其可能会利用掌握的密码信息进行不当操作,从而对系统安全造成威胁。因此,为了提升系统的安全性,我们有必要对配置文件中的敏感信息(如密码)进行加密处理。

通过加密,只有特定的人员(例如领导、架构师或技术经理)知晓解密所需的密钥,而普通开发人员无法直接获取到明文密码。这样不仅可以有效降低因密码泄露带来的风险,还能更好地保护系统的敏感数据,确保信息安全可控。这一措施不仅符合最佳安全实践,也是企业安全管理的重要一环。

一、Jasypt 简介

Jasypt 是一个用于 Java 的简易加密库,它允许开发者以最小的努力为项目添加基本的加密功能,而无需深入了解密码学的工作原理。Jasypt 提供了多种加密算法,并且可以与 Spring Boot 无缝集成,使得开发者能够轻松地对配置文件中的敏感信息进行加密。

二、环境准备

在开始之前,请确保已经安装并配置好了以下工具和环境:

  • JDK 8 或更高版本
  • Maven 或 Gradle 构建工具
  • IntelliJ IDEA 或其他 IDE
  • Spring Boot 项目

三、步骤详php

1. 引入 Jasypt 依赖

pom.XML 文件中添加 Jasypt 的依赖:

<!-- jasypt 加解密-->
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.1.2</version>
</dependency>

注意:如果你使用的是 JDK 8,请确保选择适合的 Jasypt 版本(通常是 2.x),而对于 JDK 9 及以上版本,则应选择 3.x 版本。

2. 配置秘钥与测试

为了保证安全性,我们需要设置一个加密密钥,该密钥将用于加密和解密敏感信息。
接下来,我们需要对敏感信息(如数据库密码)进行加密。可以通过编写一个简单的工具类来完成这一任务。

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.EnvironmentPBEConfig;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class JasyptTest {
    @Test
    public void testPwdEncrypt() {
        // 实例化加密器
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        // 配置加密算法和秘钥
        EnvironmentPBEConfig config = new EnvironmentPBEConfig();
        config.setAlgorithm("PBEWithMD5AndDES");    // 设置加密算法,默认的
        config.setPassword("lvdamao");      // 用于加密的秘钥(盐),可以是随机字符串,一定要记住并且存储好
        encryptor.setConfig(config);
        // 对自己的密码进行加密
        String myPwd = "huang3978850";
        String encryptedPwd = encryptor.encrypt(myPwd);
        System.out.println("++++++++++++++++++++++++++++++");
        System.out.println("+ 原密码为:" + myPwd);
        System.out.println("+ 加密后的密码为:" + encryptedPwd);
        System.out.println("++++++++++++++++++++++++++++++");
        // 备注:此方式也可以用于账号密码登录的加盐操作
    }
//    m4g9wdfnu4gMiWbCRGZjnF4T80NFO4yC
    @Test
    public void testPwdDecrypt() {
        // 实例化加密器
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        // 配置加密算法和秘钥
        EnvironmentPBEConfig config = new EnvironmentPBEConfig();
        config.setAlgorithm("PBEWithMD5AndDES");    // 设置加密算法,默认的
        config.setPassword("lvdamao");      // 用于加密的秘钥(盐),可以是随机字符串,一定要记住并且存储好
        encryptor.setConfig(config);
        String pendingPwd = "m4g9wdfnu4gMiWbCRGZjnF4T80NFO4yC";
        String myPwd = encryptor.decrypt(pendingPwd);
        System.out.println("++++++++++++++++++++++++++++++");
        System.out.println("+ 解密后的密码为:" + myPwd);
        System.out.println("++++++++++++++++++++++++++++++");
    }
}

执行测试加密程序,获得加密后的字符串
例如:
秘钥:lvdamao,密码:lvdamaoluguo,加密后:q+diStq05V6enG/Dcvcc6kPk0f8vc0Ii

SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)

SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)

将秘钥lvdamao和加密后的字符串q+diStq05V6enG/Dcvcc6kPk0f8vc0Ii填入第二段测试代码进行解密测试:
成功得到原始密码lvdamaoluguo则表示成功

SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)

使用思路:可以给项目经理或者架构师使用此工具,通过秘钥和原始密码(例如数据库密码),获取到一个新的加密后的字符串,后续其他项目开发人员只能拿到加密字符串对数据库进行连接,从而有效的减少了数据库密码的暴露风险

3. 修改配置文件

找到项目的启动文件所在模块,修改application.yml配置文件
设置jasypt和秘钥lvdamao

jasypt:
  encryptor:
    algorithm: PBEWithMD5AndDES
    password: lvdamao

将加密后的字符串替换掉原来的明文密码,并确保格式正确:

spring:
  datasource:                                     # 数据源的相关配置
    type: com.zaxxer.hikari.HikariDataSource      # 数据源的类型,可以更改为其他的数据源配置,比如druid
    driver-class-name: com.mysql.cj.jdbc.Driver      # mysql/mariadb 的数据库驱动类名称
    url: jdbc:mysql://192.168.88.160:3306/mpw-dev?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&allowpublicKeyRetrieval=true&serverTimezone=UTC
    username: root
    password: ENC(q+diStq05V6enG/Dcvcc6kPk0f8vc0Ii)
    hikari:
      connection-timeout: 30000               # 等待连接池分配连接的最大时间(毫秒),超过这个时长还没有可用的连接,则会抛出SQLException
      minimum-idle: 5                         # 最小连接数
      maximum-pool-size: 20        javascript           # 最大连接数
      auto-commit: true                       # 自动提交
      idle-timeout: 600000                    # 连接超时的最大时长(毫秒),超时则会被释放(retired)
      pool-name: DataSourceHikariCP           # 连接池的名字
      max-lifetime: 18000000                  # 连接池的最大生命时长(毫秒),超时则会被释放(retired)
      connection-test-query: SELECT 1         # 用于发送sql语句保持连接状态

例如在数据库密码上使用

SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)

4. 测试解密功能

当 Spring Boot 应用启动时,Jasypt 会自动对 ENC() 标识的字符串进行解密。可以通过以下方式验证解密是否成功:

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequestMapping("/test")
public class HelloWorld {
    @Value("${spring.datasource.password}")
    private String decryptedPassword;
    @GetMapping("/paswword")
    public String hello(){
        return "Decrypted Password: " + decryptedPassword;
    }
}

访问 /password 接口,应该能够看到解密后的明文密码。

SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)

四、进阶配置

1. 自定义加密标识

默认情况下,Jasypt 使用 ENC() 作为加密标识。如果你希望自定义加密标识,可以在 application.yml 文件中进行如下配置:

jasypt:
  encryptor:
    property:
      prefix: MY_ENC(
      suffix: )
    password: your-secret-key

这样,加密后的字符串将以 MY_ENC() 形式表示。

2. 指定加密算法

Jasypt 默认使用 PBEWithMD5AndDES 算法进行加密。如果你希望使用更高级别的加密算法(如 AES),可以在 application.yml 文件中指定:

jasypt:
  encryptor:
    algoritpythonhm: PBEWITHHMACSHA512ANDAES_256
    iv-generator-classname: org.jasypt.iv.NoIvGenerator
    password: your-secret-key

注意:某些高级加密算法可能需要安装 Java Cryptography Extension (JCE) 无限强度权限策略文件。

五、总结

通过本文的学习,我们了解了如何在 Spring Boot 项目中使用 Jasypt 对 application.yml 文件中的敏感信息进行加密。具体步骤包括引入 Jasypt 依赖、配置加密密钥、加密敏感信息以及测php试解密功能。此外,还介绍了如何自定义加密标识和指定加密算法等进阶配置。

使用 Jasypt 不仅可以提高配置文件的安全性,还可以减少因配置文件泄露而导致的安全风险。希望本文对你有所帮助!

到此这篇关于SpringBoot使用Jasypt对YML文件配置内容进行加密(例:数据库密码加密)的文章就介绍到这了,更多相关SpringBoot Jasypt配置内容加密内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153597

相关文章

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Java Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

基于Java实现回调监听工具类

《基于Java实现回调监听工具类》这篇文章主要为大家详细介绍了如何基于Java实现一个回调监听工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录监听接口类 Listenable实际用法打印结果首先,会用到 函数式接口 Consumer, 通过这个可以解耦回调方法,下面先写一个

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自