SpringBoot配置文件敏感信息加密(四十六)

news2024/9/22 15:27:36

新的生活会开始,直到完成自己的目标.

一. 配置文件敏感信息加密

我们以前在编写 application.yml 文件时,服务器的ip, 数据库的配置,Redis的密码配置等都是明文,这是很不安全的。

image-20230517103831674

我们可以通过 jasypt-spring-boot-starter 插件进行配置文件敏感信息加密。

本章节所使用的代码是: SpringBoot整合Redis(十九)

本章节参考链接: springboot 配置参数加密——jasypt

二.配置文件敏感信息加密步骤

二.一 添加依赖

 <!--配置文件加密-->
        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>3.0.2</version>
        </dependency>

默认配置属性是:

image-20230517111728418

二.二 application.yml 指定配置加密的密码

# 配置文件加密解密
jasypt:
  encryptor:
    password: 123456

image-20230517104331430

目前还是明文

二.三 生成敏感信息的密文

/**
 * jasypt 生成
 *
 * @author yuejianli
 * @date 2023-05-17
 */
@Log4j2
public class JasyptTest {

    @Test
    public void showText() {
        BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
        //加密所需的salt
        textEncryptor.setPassword("123456");
        //要加密的数据(数据库的用户名或密码)
        String username = textEncryptor.encrypt("root");
        String password = textEncryptor.encrypt("Zkong_1234");
        String redisPassword = textEncryptor.encrypt("zk123");
        System.out.println("username:"+username);
        System.out.println("password:"+password);
        System.out.println("redisPassword:"+redisPassword);

        String originUsername = textEncryptor.decrypt(username);
        String originPassword = textEncryptor.decrypt(password);
        String originRedisPassword = textEncryptor.decrypt(redisPassword);
        System.out.println("originUsername:"+originUsername);
        System.out.println("originPassword:"+originPassword);
        System.out.println("originRedisPassword:"+originRedisPassword);

    }
}

image-20230517104454678

可以正常的解析

二.四 配置文件中对敏感信息进行替换

使用 ENC() 方法 将密文包裹

image-20230517104617430

二.五 验证

image-20230517105539210

发现根本就不行, 解析不了. 这是因为采用的规则方式与系统中规则方式不一致的原因.

默认使用的是 lazyJasyptStringEncryptor,而测试使用的是 BasicTextEncryptor对象。

  @Test
    public void show2Text() {
        PooledPBEStringEncryptor textEncryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword("123456");
        config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");
        config.setKeyObtentionIterations("1000");
        config.setPoolSize("1");
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
        config.setStringOutputType("base64");
        textEncryptor.setConfig(config);

        
        //要加密的数据(数据库的用户名或密码)
        String username = textEncryptor.encrypt("root");
        String password = textEncryptor.encrypt("Zkong_1234");
        String redisPassword = textEncryptor.encrypt("zk123");
        System.out.println("username:"+username);
        System.out.println("password:"+password);
        System.out.println("redisPassword:"+redisPassword);

        String originUsername = textEncryptor.decrypt(username);
        String originPassword = textEncryptor.decrypt(password);
        String originRedisPassword = textEncryptor.decrypt(redisPassword);
        System.out.println("originUsername:"+originUsername);
        System.out.println("originPassword:"+originPassword);
        System.out.println("originRedisPassword:"+originRedisPassword);

    }

重新生成 加密信息:

image-20230517110349063

配置到 application.yml 文件里面

image-20230517110545697

运行通过

image-20230517110641189

三. 配置密码处理

虽然将数据库,redis 等敏感信息进行了加密,但同时却将 jasypt 的密码 123456 曝露了出来, 这样也会造成不安全.

可以在启动中进行配置

-Djasypt.encryptor.password=123456

image-20230517111044392

但最好是使用自定义的配置 bean 进行处理。

三.一 创建 自定义的 Bean

/**
 * @Description 配置加密文件
 * @Author yuejianli
 * @Date 2022/6/5 6:43
 **/
@Component
public class MyJasyptConfig {
    @Bean(name = "CodeEncrypBean")
    public StringEncryptor CodeEncrypBean() {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword("123456");
        config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");
        config.setKeyObtentionIterations("1000");
        config.setPoolSize("1");
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
        config.setStringOutputType("base64");
        encryptor.setConfig(config);
        return encryptor;
    }
}

三.二 application.yml 设置 Bean

# 配置文件加密解密
jasypt:
  encryptor:
    # 去掉 password 配置
    bean: CodeEncrypBean

三.三 测试验证

image-20230517111313335

本章节的代码放置在 github 上:


https://github.com/yuejianli/springboot/tree/develop/SpringBoot_Jasypt


谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/535810.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python学习26:个人所得税计算器

描述‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ 2018年10月1日以前&#xff…

Java 性能调优全攻略:步骤、工具、技巧一网打尽

Java性能调优是一项非常重要的工作&#xff0c;它可以提高应用程序的性能和可伸缩性&#xff0c;并确保应用程序在高负载情况下仍然能够快速、稳定地运行。 1、Java性能调优步骤 Java性能调优的主要步骤包括&#xff1a; 确定目标&#xff1a;首先需要明确性能调优的目标&…

提高数据的安全性和可控性,数栈基于 Ranger 实现的 Spark SQL 权限控制实践之路

在企业级应用中&#xff0c;数据的安全性和隐私保护是极其重要的。Spark 作为数栈底层计算引擎之一&#xff0c;必须确保数据只能被授权的人员访问&#xff0c;避免出现数据泄露和滥用的情况。为了实现Spark SQL 对数据的精细化管理及提高数据的安全性和可控性&#xff0c;数栈…

多维时序 | MATLAB实现CNN-BiGRU卷积神经网络结合双向门控循环单元多变量时间序列预测

多维时序 | MATLAB实现CNN-BiGRU卷积神经网络结合双向门控循环单元多变量时间序列预测 目录 多维时序 | MATLAB实现CNN-BiGRU卷积神经网络结合双向门控循环单元多变量时间序列预测预测结果基本介绍模型特点程序设计学习总结参考资料 预测结果 基本介绍 多维时序 | MATLAB实现CN…

C++进阶——红黑树

C进阶——红黑树 概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过 对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路径会比其他路径长出俩 倍&…

五分钟读完一本书 --《小王子》

所有的大人都曾经是小孩。 它是写给大人的童话。是一本用最简单纯净的文字&#xff0c;却将爱与羁绊描写得及其深刻的书。 看东西只有用心才能看得清楚&#xff0c;重要的东西用眼睛是看不见的。 这是踏遍7个星球之后 小王子才明白的道理。 小王子的B612星球小到只有一栋房子那…

小程序容器助力智能移动门户统一

智能移动统一门户遵循“统一规划&#xff0c;统一标准&#xff0c;统一建设&#xff0c;统一运维”的指导思想。它灵活运用前端展示平台&#xff0c;微服务后端平台&#xff0c;流程引擎&#xff0c;规则引擎&#xff0c;非结构化数据平台&#xff0c;即时通讯平台&#xff0c;…

Matlab论文插图绘制模板第92期—折线图(Plot)

之前有分享过Matlab折线图的绘制模板&#xff1a; 但随着技术力的提升&#xff0c;发现很多地方还有待改进&#xff0c;于是便有了本期内容。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自行下载。有需…

电子企业应如何规划数字化工厂管理系统

随着科技的不断进步和市场竞争加剧&#xff0c;越来越多的电子企业开始意识到数字化工厂的重要性。数字化工厂管理系统是利用信息技术和自动化技术&#xff0c;对生产全过程进行数字化、智能化和自动化的工厂。它将生产过程中的各个环节进行有机整合&#xff0c;从而提高生产效…

解析DDR设计中容性负载补偿的作用

高速先生成员--孙小兵 我们先来了解一下容性负载和感性负载对链路阻抗的影响。仿真链路模型如下图所示。链路中有三段50Ω的理想传输线&#xff0c;第一段和第二段之间增加一个电容模拟容性负载&#xff0c;第二段和第三段之间增加一个电感模拟感性负载&#xff0c;链路末端是一…

MySQL数据库——MySQL字符集和校对规则详解

在讲解字符集和校对规则之前&#xff0c;我们先来简单了解一下字符、字符集和字符编码。 字符&#xff08;Character&#xff09;是计算机中字母、数字、符号的统称&#xff0c;一个字符可以是一个中文汉字、一个英文字母、一个阿拉伯数字、一个标点符号等。 计算机是以二进制…

HTML处理控件Aspose.Html 功能演示:将 URL 转换为 PDF

Aspose.Html for .NET 是一种高级的HTML操作API&#xff0c;可让您直接在.NET应用程序中执行广泛的HTML操作任务&#xff0c;Aspose.Html for .NET允许创建&#xff0c;加载&#xff0c;编辑或转换&#xff08;X&#xff09;HTML文档&#xff0c;而无需额外的软件或工具。API还…

如何通过SOLIDWORKS driveworksxpress初步实现参数化设计

当提到参数化设计&#xff0c;我们首先需要了解究竟什么是参数化设计&#xff0c;它是指从一个系统的角度&#xff0c;计划所有的设计过程&#xff0c;在整个系统中建立组件、次组件和子零件之间的关系&#xff0c;在最上层的部分建立设计意图&#xff0c;并将其往较下层的部分…

软件设计师 程序设计语言笔记

解释编译程序翻译阶段背诵 C 语义分析背诵 正规式题背诵 **星号表示闭包&#xff1a;出现0次或者多次 星号一般是就近原则&#xff0c;左边最近的第一个 星号你可以自定义数 1旁边没有闭包符号所以控制不到1所以这题选b 有限自动机 第一位和最后一位都必须是0 a这里的&…

jenkins 进行 gitlab, maven ,nodejs 配置

文章目录 一 . gitlab配置1. 安装gitlab插件 并进行配置2. 配置gitlab 二 maven配置一 安装maven插件二 进行maven环境配置 nodejs配置一 安装nodejs插件二 进行nodejs配置 一 . gitlab配置 1. 安装gitlab插件 并进行配置 登录gitlab进入token信息获取页面 输入名称, 选择api…

ABAP 集成钉钉开放平台

SAP->钉钉审批集成流程图 钉钉开放平台下载证书 进入钉钉开放平台&#xff0c;找到钉钉被调用api的域名 钉钉获取应用token官方文档 请求方法处可以找到域名&#xff0c;直接通过域名访问api地址下载证书 域名&#xff1a;api.dingtalk.com 访问域名获取证书信息 有三层…

C++显式,默认拷贝构造函数的特征以及使用

文章目录 前言一、拷贝构造函数特征二、默认拷贝构造函数&#xff08;编译器生成&#xff09; 前言 C规定&#xff1a; 1.内置类型传参直接拷贝。 2.自定义类型传参要进行拷贝构造完成拷贝 拷贝构造函数&#xff1a;只有单个形参&#xff0c;该形参是对本类类型对象的引用(一般…

ofo小黄车创始人赴美创业,他还欠你押金不?

ofo创始人近期又去美丽国创业去了&#xff0c;开始搞冰镇珍珠咖啡的生意去了&#xff0c;做为普通大众吃瓜的我&#xff0c;不禁想到&#xff0c;不是还欠了那么多钱呢&#xff0c;又开始创业了&#xff1f;钱从哪里来的&#xff1f;创业真的是想创就创&#xff1f;咋我还是苦哈…

ChatGPT实现旅行安排

工作之余&#xff0c;出门旅行一趟放松放松身心&#xff0c;是对自己辛勤工作最好的犒劳方式之一。旅行可以近郊游、可以远游&#xff0c;可以穷游&#xff0c;可以自驾游&#xff0c;可以一言不合打飞的喂鸽子&#xff0c;方式多种多样。但是多数情况&#xff0c;我们是到一个…

[Golang] 管理日志信息就用Zap包

&#x1f61a;一个不甘平凡的普通人&#xff0c;致力于为Golang社区和算法学习做出贡献&#xff0c;期待您的关注和认可&#xff0c;陪您一起学习打卡&#xff01;&#xff01;&#xff01;&#x1f618;&#x1f618;&#x1f618; &#x1f917;专栏&#xff1a;算法学习 &am…