首页 > 其他分享 >SpringBoot配置文件敏感信息加密方案

SpringBoot配置文件敏感信息加密方案

时间:2024-06-08 23:00:11浏览次数:25  
标签:ENC 加密 SpringBoot 配置文件 encryptor iv textEncryptor password Djasypt

在SpringBoot Project中,会将一些敏感信息配置到application.yml/application.properties配置文件中(同样适用于Spring Cloud的各个微服务其实(微服务实例)本质就是一个SpringBoot),例如数据库的用户名和密码、Redis的密码等。为了保证敏感信息的安全,我们需要将此类数据进行加密配置。

Jasypt方案

Jasypt: Java simplified encryption

以下实践在JDK21、SpringBoot3.3.0下成功验证,若你的JDK和SpringBoot版本有所差异,可能需要调整一些细节

pom.xml引入依赖

		<!-- https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter -->
		<dependency>
			<groupId>com.github.ulisesbocchio</groupId>
			<artifactId>jasypt-spring-boot-starter</artifactId>
			<version>3.0.5</version>
		</dependency>

加密你的敏感信息

public class TmpUtil {

    public static void main(String[] args) {
        BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
        //加密所需的秘钥(salt),解密敏感信息仍旧需要改值
        textEncryptor.setPassword("ashe");
        //要加密的敏感信息
        String url = textEncryptor.encrypt("jdbc:mysql://${host}/${port}?serverTimezone=Asia/Shanghai");
        String username = textEncryptor.encrypt("username");
        String password = textEncryptor.encrypt("password");
        String driver = textEncryptor.encrypt("com.mysql.cj.jdbc.Driver");
        System.out.println("ENC("+url+")");
        System.out.println("ENC("+username+")");
        System.out.println("ENC("+password+")");
        System.out.println("ENC("+driver+")");
        System.out.println(textEncryptor.decrypt(username));
        System.out.println(textEncryptor.decrypt(password));
    }
}

application.yml填写加密后的密文

spring:
  datasource:
    url: ENC(xxxx)
    username: ENC(xxxx)
    password: ENC(xxxx)
    driver-class-name: ENC(xxxx)

#jasypt:
#  encryptor:
#    password: ashe # 替换为你自己的密钥
#    iv-generator-classname: org.jasypt.iv.NoIvGenerator
#    algorithm: PBEWithMD5AndDES

Jasypt库所使用的默认加密算法为PBEWithMD5AndDES,其需要解密的内容需要用ENC()包裹(你可以自定义选择其他加密算法),如果在配置文件中直接展示你的秘钥,那么密文将很容易被解密出原文,因此一般不建议在配置文件中展示,而是通过启动脚本的方式来告诉Jasypt秘钥值,用以解密密文。

IDEA中本地启动设置VM Options

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

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

Linux中的启动脚本

#!/bin/bash

# Start the application with the Jasypt encryptor password (replace with your actual start command)
java -Djasypt.encryptor.password=ashe -Djasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator -Djasypt.encryptor.algorithm=PBEWithMD5AndDES -jar your-application.jar

较低版本的jasypt似乎不需要显式指定iv-generator-classname和algorithm

其他方案

  • Druid方案
  • Spring Cloud Vault 加密

 

标签:ENC,加密,SpringBoot,配置文件,encryptor,iv,textEncryptor,password,Djasypt
From: https://www.cnblogs.com/ashet/p/18239074

相关文章

  • SpringBoot在线服装商城(前后端不分离)
    技术栈JavaSpringBootJspMyBatisMySQL角色对应功能用户商品浏览商品下单订单管理个人信息编辑资讯浏览销售榜单浏览信息反馈登录注册管理员登录商品管理用户管理新闻资讯管理订单管理信息反馈管理系统功能截图......
  • SpringBoot+Vue月度员工绩效考核管理系统(前后端分离)
    技术栈JavaSpringBootShrioMavenMySQLMyBatisVueElement-UI角色对应功能管理员登录修改密码岗位管理部门管理绩效指标管理员工管理绩效考核管理公告信息管理用户登录个人信息修改修改密码绩效考核指标浏览绩效考核浏览功能截图......
  • 新增菜品——后端SpringBoot
    交互逻辑:页面发送ajax请求,请求服务端获取菜品分类数据并展示到下拉框中页面发送请求进行图片上传,请求服务端将图片保存到服务器页面发送请求进行图片下载,将上传的图片进行回显点击保存按钮,发送ajax请求,将菜品相关数据以json形式提交到服务器核心:    新增菜品功能,实......
  • Springboot 开发 -- Redis实现分布式Session
    一、引言在微服务架构和分布式系统中,会话管理(SessionManagement)成为了一个挑战。传统的基于Servlet容器的会话管理方式在分布式环境下无法有效工作,因为用户请求可能会被分发到不同的服务器上,导致会话数据无法共享。为了解决这个问题,SpringSession提供了一种基于外部存储(......
  • 【计算机毕业设计】springboot027网上点餐系统
    随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于网上点餐系统当然也不能排除在外,随着网络技术的不断成熟,带动了网上点餐系统,它彻底改变了过去传统的管理方式,不仅使服务管理难度变低了,还提升了管理的灵活性。这种个性化的平台特别......
  • 【计算机毕业设计】springboot030甘肃非物质文化网站的设计与开发
    现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本甘肃非物质文化网站就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,......
  • 【计算机毕业设计】springboot031教师工作量管理系统
    随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了教师工作量管理系统的开发全过程。通过分析教师工作量管理系统管理的不足,创建了一个计算机管理教师工作量管理系统的方案。文章介绍了教师工作量管理系统的系统分析部分,包括可......
  • 【计算机毕业设计】springboot032阿博图书馆管理系统
    随着社会的发展,计算机的优势和普及使得阿博图书馆管理系统的开发成为必需。阿博图书馆管理系统主要是借助计算机,通过对图书借阅等信息进行管理。减少管理员的工作,同时也方便广大用户对所需图书借阅信息的及时查询以及管理。阿博图书馆管理系统的开发过程中,采用B/S架构,主......
  • 小白之路之SpringBoot框架
    在最近学习闲暇时刻突然爆发灵感想要自己写一个通用的SpringBoot项目出来,目前使用了到jwt+redis+mybatisPlus嗯差不多这些吧。整个项目的目录框架这个结构差不多也是在网上到处缝缝补补(以致于可能是SpringBoot还是SpringCloud都有一点分不清除了),暂时分为了两个模块1、com......
  • SpringBoot 快速实现 api 加密!
    在项目中,为了保证数据的安全,我们常常会对传递的数据进行加密。常用的加密算法包括对称加密(AES)和非对称加密(RSA),博主选取码云上最简单的API加密项目进行下面的讲解。https://gitee.com/isuperag/rsa-encrypt-body-spring-boot项目介绍该项目使用RSA加密方式对API接口返回的......