当前位置: 首页 > article >正文

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 {

    @Autowired
    private 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 


http://www.kler.cn/a/274168.html

相关文章:

  • C语言-结构体内存大小
  • 多目标应用(一):多目标麋鹿优化算法(MOEHO)求解10个工程应用,提供完整MATLAB代码
  • 谈谈JSON
  • 快速解决oracle 11g中exp无法导出空表的问题
  • Linux复习4——shell与文本处理
  • Kubernetes、Docker 和 Docker Registry 关系是是什么?
  • python连接mysql数据库步骤
  • nfs介绍与配置
  • 2024年企业经济管理与大数据国际会议(ICEEMBD 2024)
  • 【React 】如何提高组件的渲染效率?在React中如何避免不必要的render?
  • CTF题型 SSTI(2) Flask-SSTI典型题巩固
  • 【代码】YOLOv8标注信息验证
  • Flutter 事件传递简单概述、事件冒泡、事件穿透
  • 第十三届蓝桥杯(C/C++ 大学B组)
  • easyexcel读和写excel
  • gitlab仓库使用流程(开发)
  • jQuery 常用API
  • 【考研数学】张宇各阶段用书详细指南
  • 【图解物联网】第2章 物联网的架构
  • ByteArrayOutputStream流
  • AMRT 3D 数字孪生引擎(轻量化图形引擎、GIS/BIM/3D融合引擎):智慧城市、智慧工厂、智慧建筑、智慧校园。。。
  • 电子科技大学链时代工作室招新题C语言部分---题号G
  • 精密星历解析
  • Android 启动service(Kotlin)
  • flink重温笔记(十八): flinkSQL 顶层 API ——实时数据Table化(涵盖全面实用的 API )
  • CTF题型 php反序列化进阶(1) php原生类 例题和总结