SpringBoot项目配置明文密码泄露问题处理

article/2025/11/5 12:19:38

在项目开发过程中,需要配置数据库连接密码、Redis密码、网盘上传的AK/SK等敏感信息,都需要保存在配置文件里,或者配置中心。
这些信息如果泄露,还是会造成一定的困扰,这里介绍2种处理方案:

1、使用系统环境变量储存密码
比如K8S的环境变量、Windows的环境变量、Centos的环境变量等等,
然后在程序里使用 System.getenv()方法读取。
这种方式的好处:只有运维人员知道,连开发都不知道生产的密码。
密码变更也简单,运维直接操作就好了。
缺点就是部署时,容易遗漏,不过可以通过统一的环境镜像来处理。
一般推荐这种方式
注:如果变更密码,还是要考虑重启一下服务器上的所有服务,避免缓存了旧密码,导致服务故障。


2、密码还是写在程序的配置文件里,或者nacos之类的配置中心, 但是不使用明文,而是使用加密后的串。 同时在启动命令行里,指定密码参数。 下面介绍一下这种加密方式:

2.1、添加依赖,参考:https://github.com/ulisesbocchio/jasypt-spring-boot

<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.4</version>
</dependency>

2.2、对文本进行加密,假设密码为123456,加密代码如下(建议部署一个加密后台,给开发用):

// 参考 https://github.com/ulisesbocchio/jasypt-spring-boot
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);
System.out.println("beinet 加密后: " + encryptor.encrypt(username));

上面的代码输出:beinet 加密后: 8LJb3ICopErpPuEw1S/3rHc2fkk1qPScP0ODDbnmuSBjY6NJqN1oZcAxNDVl06qv

2.3、把加密后的文本,套上 ENC()函数,写入yml配置里:

pwdTest:ak: ENC(8LJb3ICopErpPuEw1S/3rHc2fkk1qPScP0ODDbnmuSBjY6NJqN1oZcAxNDVl06qv)

2.4、配置一下IDEA的Java启动命令行参数:
点击右上角 Edit Configurations… 在右侧Configuration=>Environment=>VM options的右边添加:
-Djasypt.encryptor.password=123456
在这里插入图片描述

2.5、运行代码验证一下:

@Value("${pwdTest.ak}")
private String ak;
@Override
public void run(String... args) throws Exception {System.out.println(ak);
}

可以看到,能成功打印出解密后的 beinet


http://chatgpt.dhexx.cn/article/Q3HhtHAt.shtml

相关文章

内网渗透(抓取明文密码)

1. 注册表导出 reg save hklm\sam sam.hiv ———> SAM文件reg save hklm\system sys.hiv ———> SYS文件注意事项: 1) 在Windows 2003版本包含2003以上都可以使用该命令 2) 在windows 2003中他会以ltml 3) 都是加密Hash演示: 1)下载mimikatz然后执行:lsadump::s…

域渗透——获取用户明文密码

目录 讲在前面&#xff1a; 一、CredSSP获取明文密码 二、Dcsync获取明文密码 讲在前面&#xff1a; 本文是笔者在学习"三好学生"前辈的文章进而总结的一篇文章&#xff0c;内容主要是在内网渗透中获得明文密码的两种方式。&#xff0c;在笔者看来&#xff0c;两…

Navicat导出链接查看数据库明文密码

测试环境&#xff1a;Navicat Premium 版本15.0.25 理论版本12以上即可。 参考地址&#xff1a;navicat~导出数据库密码 - 走看看 Hutool参考文档 代码 import cn.hutool.core.io.file.FileReader; import cn.hutool.crypto.symmetric.AES; import org.dom4j.*;import java.u…

Windows10明文密码抓取

procdumpmimikatz获取win10用户明文密码 测试环境&#xff1a;Win10 企业版LTSC 1809 工具下载&#xff1a;k8版本的mz64.exe、procdumpv9.0 原理&#xff1a;获取到内存文件lsass.exe进程(它用于本地安全和登陆策略)中存储的明文登录密码 利用前提&#xff1a;拿到了admin…

开发反模式 - 明文密码

开发反模式 - 明文密码 一、目标&#xff1a;恢复或重置密码 每个有密码的程序都会碰到用户忘记密码的情况&#xff0c;现今大多数程序都通过E-mail的回馈机制让用户恢复或者重置密码。这个解决方案有一个前提&#xff0c;这个服务有一个前提&#xff0c;就是这个用户能够访问他…

MD5明文密码加密

MD5 一、加密缘由 首先看一下未使用MD5加密的数据库 这样的话如果黑客攻击数据库的时候得到数据库的资料&#xff08;主要密码&#xff09;就会导致用户的财产等受到危害&#xff0c;所以需要对密码进行加密操作 二、加密的算法MD5 2.1、运用了单向加密算法&#xff08;下…

Unity基础: 对Anchors锚点的使用

在UI对象上是用RectTransform组件来控制位置和大小的&#xff0c;在RectTransform中有一个Anchors属性。Anchors属性可以将当前对象的四个角锚点定位到父对象的某个位置&#xff0c;并且Anchor还允许子对象的宽高随着父对象的宽高一起拉伸。 上面一个示例中显示的就是将一个Ima…

(笔记)yolov5自适应anchors

训练一开始会先计算Best Possible Recall (BPR),当BPR < 0.98时&#xff0c;再在kmean_anchors函数中进行k 均值和遗传学习算法更新anchors。 情况一&#xff1a; 在进行yolov5训练的时候&#xff0c;会输出&#xff1a; Analyzing anchors... Best Possible Recall (BPR…

Roson讲Qt#16 QML中的anchors(锚)

QML中有一个数据类型叫Item&#xff0c;Item里面有很多属性&#xff0c;其中一个就是anchors. anchors翻译过来叫“锚”&#xff0c;锚可能不好理解&#xff0c;在我看来&#xff0c;可以把anchors当成是一个控件浓缩而成的一个点&#xff0c;可以通过设置点的上下左右等属性来…

Qml基于锚(anchors)的布局

锚(anchors)布局&#xff0c;每一个项目都可以认为有一组无形的锚线 left,horizontalCenter,right,top,verticalCenter,baseline和bottom. 如上图&#xff1a;图中没有显示baseline&#xff0c;它是一条假想的线&#xff0c;文本坐落在这条线上。对于没有文本的项目它与top相同…

RPN之生成anchors

看不懂anchor生成方法&#xff0c;就看不懂参数。 faster_rcnn的anchors生成 在这里我就不看faster_rcnn的anchors生成源代码了&#xff0c;我们用numpy自己去实现&#xff0c;在128*128大小的图片中生成anchors. 开始上代码 import numpy as np import matplotlib.pyplot …

Qml anchors锚点布局

关于qml的锚点布局的一些分享&#xff0c;并不能算是教学之类的。 锚点布局会自动设置宽度高度&#xff0c;并且优先级比 width height更高 import QtQuick 2.13 import QtQuick.Window 2.12 import QtQml 2.13Window {width: 640height: 480visible: truetitle: qsTr("a…

yolo_anchors.txt超参数值设置

keras-yolov3在训练自定义图片集之前&#xff0c;设置合理的yolo_anchors.txt值&#xff0c;有利于模型训练的收敛&#xff0c;一般都带有默认的参数如下&#xff1a; 在实际项目中&#xff0c;yolo_anchors的值可以根据kmeans.py计算获取&#xff0c;通过聚类得到最佳anchors数…

QML之anchors锚布局

QML的布局方式一般采用两种&#xff0c;一种就是直接设置&#xff0c;X与Y坐标的值。一种是采用相对位置布局&#xff0c;anchors锚布局。使用锚布局的能够使界面更紧凑&#xff0c;更有整体化。我个人相对比较喜欢使用锚布局&#xff0c;选取一个最合适的参考点&#xff0c;其…

YOLOV5源代码学习之check_anchors()函数

该函数主要在train.py中调用 为了方便直观的阅读代码&#xff0c;对代码中的变量值进行了输出 def check_anchors(dataset, model, thr4.0, imgsz640):# Check anchor fit to data, recompute if necessaryprefix colorstr(autoanchor: )print(f\n{prefix}Analyzing anchors.…

QML入门教程(3): anchors的用法

QML的布局方法是anchors,锚。 例如界面上四个按钮,可以用绝对坐标 (x, y) 设置他们的位置, 代码如下: import QtQuick 2.12 import QtQuick.Window 2.12 import QtQuick.Controls 2.5Window {visible: truewidth: 320height: 480title: qsTr("Hello World")co…

目标检测2——借Detectron2源码理解Anchors与RPN

文章目录 1.Regionn Proposal Network背景2.Regionn Proposal Network的结构3.Anchors4.Regionn Proposal Network的训练参考资料 欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; 1.Regionn Proposal Network背景 RPN&#xff0c;Region …

QML基础:锚anchors

正文 除了传统的Grid、Row和Column外,Qt Quick还提供了一种使用锚点的方法来布局。可以将每个元素视为具有7条不可见的“锚定线”的集合:left、horizontalCenter、right、top、verticalCenter、baseline和bottom。 baseline(上图未展示)对应于文本所在的虚线。对于没有文…

细说目标检测中的Anchors

本文转载自AI公园。 作者&#xff1a;Raghul Asokan 编译&#xff1a;ronghuaiyang 导读 给大家再次解释一下Anchors在物体检测中的作用。 今天&#xff0c;我将讨论在物体检测器中引入的一个优雅的概念 —— Anchors&#xff0c;它是如何帮助检测图像中的物体&#xff0c;以及…

anchors布局

anchors布局 import QtQuick 2.2 import QtQuick.Window 2.2 Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Rectangle {width: 300;height: 200;color: "blue";Rectangle {id: rectl;anchors.left: parent.left;anchors.leftMar…