SpringBoot集成Jasypt实现敏感信息加密

2024-03-18 18:52

本文主要是介绍SpringBoot集成Jasypt实现敏感信息加密,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目场景:

        在服务中不可避免的需要使用到一些秘钥(数据库、redis等)开发和测试环境还好,但生产如果采用明文配置将会有安全问题,jasypt是一个通用的加解密库,可以使用它。

        在Spring Boot中使用Jasypt加密和解密敏感数据非常简单,只需要在Spring Boot应用程序中添加Jasypt依赖项,并在应用程序配置文件中指定加密和解密密钥即可。


实现步骤:

1、添加Jasypt依赖

<!-- 配置文件敏感信息加密 -->
<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>2.1.1</version>
</dependency>

2、添加配置信息 

为了避免密钥泄露,密钥不应该直接放在文件中,这里为了方便暂时放在配置文件中。

# 本地启动配置文件,加密秘钥需在该配置中指定,便于开发交流
# 正式环境可配置JVM启动参数: -Djasypt.encryptor.password=testjasypt
jasypt.encryptor.password = testjasypt
#加密算法,不配置使用默认的
#jasypt.encryptor.algorithm = PBEWithMD5AndDES       

正式环境可以把秘钥放在环境变量中启动 

java -Djasypt.encryptor.password=秘钥 -jar xxx.jar 

3、生成密文

方式一:java文件生成加密

package com.test.controller;import org.jasypt.encryption.StringEncryptor;
import org.jasypt.util.text.BasicTextEncryptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;/*** jasypt加密解密*/
@Api(tags = "jasypt加密解密测试")
@RestController
@RequestMapping("/v1/jasypt")
public class JasyptController {@Autowiredprivate StringEncryptor stringEncryptor;/*** jasypt加密** @param password*/@ApiOperation(value = "jasypt加密")@GetMapping("/encrypt")public String encrypt(String password) {return stringEncryptor.encrypt(password);}/*** jasypt解密** @param password* @return*/@ApiOperation(value = "jasypt解密")@GetMapping("/decrypt")public String decrypt(String password) {return stringEncryptor.decrypt(password);}public static void main(String[] args) {BasicTextEncryptor encryptor = new BasicTextEncryptor();//加密密钥encryptor.setPassword("testjasypt");//加密String encData = encryptor.encrypt("test123456!");//解密String decData = encryptor.decrypt(encData);System.out.println("加密后:"+encData);System.out.println("解密后:"+decData);}
}

方式二:CMD命令行加密

通过该种方式获取密文,需要到maven仓库下jasypt-1.9.2.jar(版本根据自身选择)包所在的路径下执行,否则会报找不到对应的主类,一般目录在repository\org\jasypt\jasypt\下面。

// 加密命令
java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input='test123456!' password=testjasypt algorithm=PBEWithMD5AndDES// 解密命令
java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input='Vqlju4F/mF4dIxGfxk2LMcNVx8NTwbln' password=testjasypt algorithm=PBEWithMD5AndDES

参数说明:

  • org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI是jasypt提供的一个用于加密的实体类
  • input表示需要加密的字符串如:密码
  • password表示本次加密算法使用的秘钥
  • algorithm表示加密算法的名称,默认PBEWithMD5AndDES

 

 

4、配置加密后的密码

ENC()是固定格式,括号里是上一步生成的密文。

#原来的密码
#spring.datasource.password=test123456!
#加密后的密码
spring.datasource.password=ENC(Vqlju4F/mF4dIxGfxk2LMcNVx8NTwbln)

源码地址:https://download.csdn.net/download/u011974797/88985378 

这篇关于SpringBoot集成Jasypt实现敏感信息加密的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java对象和JSON字符串之间的转换方法(全网最清晰)

《Java对象和JSON字符串之间的转换方法(全网最清晰)》:本文主要介绍如何在Java中使用Jackson库将对象转换为JSON字符串,并提供了一个简单的工具类示例,该工具类支持基本的转换功能,... 目录前言1. 引入 Jackson 依赖2. 创建 jsON 工具类3. 使用示例转换 Java 对象为

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

Java中的Cursor使用详解

《Java中的Cursor使用详解》本文介绍了Java中的Cursor接口及其在大数据集处理中的优势,包括逐行读取、分页处理、流控制、动态改变查询、并发控制和减少网络流量等,感兴趣的朋友一起看看吧... 最近看代码,有一段代码涉及到Cursor,感觉写法挺有意思的。注意是Cursor,而不是Consumer

解决java.lang.NullPointerException问题(空指针异常)

《解决java.lang.NullPointerException问题(空指针异常)》本文详细介绍了Java中的NullPointerException异常及其常见原因,包括对象引用为null、数组元... 目录Java.lang.NullPointerException(空指针异常)NullPointer

javaScript在表单提交时获取表单数据的示例代码

《javaScript在表单提交时获取表单数据的示例代码》本文介绍了五种在JavaScript中获取表单数据的方法:使用FormData对象、手动提取表单数据、使用querySelector获取单个字... 方法 1:使用 FormData 对象FormData 是一个方便的内置对象,用于获取表单中的键值

Vue ElementUI中Upload组件批量上传的实现代码

《VueElementUI中Upload组件批量上传的实现代码》ElementUI中Upload组件批量上传通过获取upload组件的DOM、文件、上传地址和数据,封装uploadFiles方法,使... ElementUI中Upload组件如何批量上传首先就是upload组件 <el-upl

前端知识点之Javascript选择输入框confirm用法

《前端知识点之Javascript选择输入框confirm用法》:本文主要介绍JavaScript中的confirm方法的基本用法、功能特点、注意事项及常见用途,文中通过代码介绍的非常详细,对大家... 目录1. 基本用法2. 功能特点①阻塞行为:confirm 对话框会阻塞脚本的执行,直到用户作出选择。②

Docker部署Jenkins持续集成(CI)工具的实现

《Docker部署Jenkins持续集成(CI)工具的实现》Jenkins是一个流行的开源自动化工具,广泛应用于持续集成(CI)和持续交付(CD)的环境中,本文介绍了使用Docker部署Jenkins... 目录前言一、准备工作二、设置变量和目录结构三、配置 docker 权限和网络四、启动 Jenkins

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排