python 配置文件中密码不能是明文_配置文件中明文密码改为密文密码的方法
我们用java链接数据库,不管是web项目还是小程序,都需要把数据库密码写在配置文件中(当然你要写死在程序里也没有办法),或者数据库中,通常源代码漏洞扫描都会告诉你不能有明文密码,那么有什么办法可以变为密文呢?
一、思路如下
写一个非对称加密的工具类,用私钥加密明文,然后把公钥和得到的密文放在配置文件中,代码中读取密码的时候就把公钥和密文读取进来解密后给程序用。
很简单吧!
二、一个实现
这里就举一个实现的例子,直接借用druid提供的工具类来,毕竟我现在的项目数据库连接池都是用阿里的Druid.
1、在pom.xml加入如下依赖
com.alibaba
druid-spring-boot-starter
1.1.9
当然可能老项目的话没有用maven就直接添加如下jar即可;
druid-1.1.9.jar
2、写一个如下工具类/**
* druid数据库连接池中的密码进行非对称加密,使用方式
* 1、在cmd中执行:java -cp druid-1.1.9.jar com.alibaba.druid.filter.config.ConfigTools 要加密的串
* 2、获取公钥和加密串放到配置文件中(cmd获取方法右键标记,左键选取,按enter就复制到粘贴板了)
* 3、使用的时候,获取公钥和加密串后调用下面的decrypt方法进行解密
* @author lwh
*
*/
publicclassDruidEncryptDecrypt{
publicstaticStringdecrypt(StringpublicKey,StringencryptPassword){
try{
returnConfigTools.decrypt(publicKey,encryptPassword);
}catch(Exceptione){
// TODO Auto-generated catch block
e.printStackTrace();
}
return"";
}
}
当然,你也可以直接使用ConfigTools就可以了,不过我这个方便写秘钥生成步骤,你也可以直接用默认的秘钥但是不建议。
2、按工具类中的步骤生成公钥和KEY,如下图所示
获取到publicKey和passwd替换配置文件中的明文密码.
3、修改以前的数据库连接信息读取类,对密码调用DruidEncryptDecrypt进行解密,如下所示:publicStringgetPassword(){
//这里直接返回解密数据
returnDruidEncryptDecrypt.decrypt(publicKey,password);
}
这一步骤可能有人会问了,我在哪里加这个代码,我用spring都是直接在application.xml中加上去的,调用不了java代码啊?
亲,这里有两种办法解决
办法1、如果你是springboot项目,那么你可以百度下springboot整合druid密码加密,那里有集成的,这个不多说。
办法2、你看application.xml中其实就是一个dataSource的bean,你直接抽取出来写成一个配置类即可,可以参考如下我的博文:
当然,办法二是很通用的,所以我这里一般选择办法2.
搞定~
感想:要是被别人知道了配置文件也就是知道了密文和公钥,那也是很容易知道真实密码的,所以这个其实在我认为是自欺欺人罢了,还不如把公钥或者明文密码在程序启动的时候参数输入。
python 配置文件中密码不能是明文_配置文件中明文密码改为密文密码的方法相关推荐
- python里的demo是什么意思_软件中的“DEMO” 是什么意思?游戏中的“DEMO呢?
软件中的"DEMO" 是什么意思?游戏中的"DEMO呢? 2020-08-27 提示Initialization failure:0x0000000c错误无法上网?解决方 ...
- python中哪里用到缩进_建筑防火中各类门的总结归纳!乙级门?甲级门?都哪里用到了!...
大家在学习防火部分时,会遇到各种场所设置不同耐火性能的防火门,很杂乱的感觉,今天这里就好好总结一下,希望对大家能有帮助!一:双设门1.防烟楼梯间:此处的防烟楼梯间分为两种:一种是普通意义上的,即咱们经 ...
- idea中怎么新建vue项目_项目中使用vue-awesome-swiper
一.简介 Swiper常用于移动端网站的内容触摸滑动 Swiper是纯javascript打造的滑动特效插件,面向手机.平板电脑等移动终端,以及PC端网站.Swiper能实现触屏焦点图.触屏Tab切换 ...
- python转垂直输出型烟雾机_一种舞台表演用烟雾机的制作方法
本实用新型涉及舞台表演技术领域,具体为一种舞台表演用烟雾机. 背景技术: 烟雾机是一种能够产生烟雾的设备,被广泛的应用于舞台表演.电视拍摄等领域,舞台表演为了能够给观众带来视觉冲击,对烟雾机的要求极为 ...
- python中的pattern什么意思_正则表达式中(?:pattern)、(?=pattern)、(?!pattern)、(?=pattern)和(?!pattern)...
(?:pattern) ()表示捕获分组,()会把每个分组里的匹配的值保存起来,从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推 (?:)表示非捕获分组,和捕获分组唯一 ...
- python中的datatype啥意思_案例中使用的是dataType,但是用在联系上面dataType不可用,必须改写成type:..._慕课问答...
dataType和type是两个配置,代表不同意思: dataType 类型:String 预期服务器返回的数据类型.如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如 ...
- python可以做表格文档吗_生活中的python-利用python-docx自动生成表格简化工作流程...
因为工作原因,需要经常往两个word模板里填写内容并生成新的word文件,模板大致如下图: 老的工作流程: 打开两个表,在表中对应位置填写个人信息,保存.这样一来,当需要填写的信息比较多的时候,工作就 ...
- python输出引号内的变量值_引号中的Python变量值
我正在编辑一个脚本,它向openstack keystone进行身份验证以获取令牌.API调用可以工作,但我希望使用变量而不是直接值,以使其更具可读性和可重用性.但问题是这些值必须用引号(" ...
- 基于python的国内外研究现状怎么写_毕业论文中的国内外研究现状怎么写啊
毕业论文中的国内外研究现状怎么写啊以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 毕业论文指之 "国内外研究现 ...
最新文章
- controller如何保证当前只有一个线程执行_今天我们来聊一聊 Spring 中的线程安全性...
- DeepMind开源强化学习环境,灵活可配置,计算资源有限的小型实验室也能用
- [整理]MySql批量数据导入Load data infile解决方案
- 正式软件工作第一天————MVC、ext JS、和clsa
- [.net 面向对象程序设计深入](4)MVC 6 —— 谈谈MVC的版本变迁及新版本6.0发展方向...
- 华为系统10.0是鸿蒙吗,暂时忘记鸿蒙!华为EMUI 10.0发布时间确认:这才是主角...
- Qt文档阅读笔记-qRegisterMetaType()的原理及其使用
- window 2008r2 无法访问 Ox80004005
- 当Kubernets遇上阿里云 -之七层负载均衡(一).
- linux -初步认识之软件安装
- 利用Wireshark分析UDP数据包
- java8 时间加一秒_都9012了,Java8中的日期时间API你还没有掌握?
- 软件安全需求、设计、测试【归纳】
- 浅谈Single-Pass算法
- 万亿候苹果,1000000000000 美元的海盗公司 | 摸鱼系列
- bno055传感器数据不更新_博世传感器BNO055智能9轴 的绝对方向传感器
- Ubuntu 16.04 LTS设置屏幕分辨率并永久保存所设置的分辨率
- Android 刘海屏 适配
- 绝对值不等式解绝对值二次函数的最值_Simplelife_新浪博客
- $route和$router的区别
热门文章
- Spring启动和缓存抽象
- mfc 弹簧_整合弹簧,速度和瓷砖
- Java无处不在:使用DukeScript在任何地方运行一次编写
- 摆脱困境:将运行时配置作为JSON返回
- jboss4.2.3_JBoss 4.2.x Spring 3 JPA Hibernate教程
- 将WildFly绑定到其他IP地址或多宿主上的所有地址
- 参数化的JUnit测试
- 使用Xtend构建Vaadin UI
- python执行linux命令返回结果_python执行linux命令的简单示例
- Struts2的控制器(Controller)的工作流程图