我们用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 配置文件中密码不能是明文_配置文件中明文密码改为密文密码的方法相关推荐

  1. python里的demo是什么意思_软件中的“DEMO” 是什么意思?游戏中的“DEMO呢?

    软件中的"DEMO" 是什么意思?游戏中的"DEMO呢? 2020-08-27 提示Initialization failure:0x0000000c错误无法上网?解决方 ...

  2. python中哪里用到缩进_建筑防火中各类门的总结归纳!乙级门?甲级门?都哪里用到了!...

    大家在学习防火部分时,会遇到各种场所设置不同耐火性能的防火门,很杂乱的感觉,今天这里就好好总结一下,希望对大家能有帮助!一:双设门1.防烟楼梯间:此处的防烟楼梯间分为两种:一种是普通意义上的,即咱们经 ...

  3. idea中怎么新建vue项目_项目中使用vue-awesome-swiper

    一.简介 Swiper常用于移动端网站的内容触摸滑动 Swiper是纯javascript打造的滑动特效插件,面向手机.平板电脑等移动终端,以及PC端网站.Swiper能实现触屏焦点图.触屏Tab切换 ...

  4. python转垂直输出型烟雾机_一种舞台表演用烟雾机的制作方法

    本实用新型涉及舞台表演技术领域,具体为一种舞台表演用烟雾机. 背景技术: 烟雾机是一种能够产生烟雾的设备,被广泛的应用于舞台表演.电视拍摄等领域,舞台表演为了能够给观众带来视觉冲击,对烟雾机的要求极为 ...

  5. python中的pattern什么意思_正则表达式中(?:pattern)、(?=pattern)、(?!pattern)、(?=pattern)和(?!pattern)...

    (?:pattern) ()表示捕获分组,()会把每个分组里的匹配的值保存起来,从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推 (?:)表示非捕获分组,和捕获分组唯一 ...

  6. python中的datatype啥意思_案例中使用的是dataType,但是用在联系上面dataType不可用,必须改写成type:..._慕课问答...

    dataType和type是两个配置,代表不同意思: dataType 类型:String 预期服务器返回的数据类型.如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如 ...

  7. python可以做表格文档吗_生活中的python-利用python-docx自动生成表格简化工作流程...

    因为工作原因,需要经常往两个word模板里填写内容并生成新的word文件,模板大致如下图: 老的工作流程: 打开两个表,在表中对应位置填写个人信息,保存.这样一来,当需要填写的信息比较多的时候,工作就 ...

  8. python输出引号内的变量值_引号中的Python变量值

    我正在编辑一个脚本,它向openstack keystone进行身份验证以获取令牌.API调用可以工作,但我希望使用变量而不是直接值,以使其更具可读性和可重用性.但问题是这些值必须用引号(" ...

  9. 基于python的国内外研究现状怎么写_毕业论文中的国内外研究现状怎么写啊

    毕业论文中的国内外研究现状怎么写啊以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 毕业论文指之 "国内外研究现 ...

最新文章

  1. controller如何保证当前只有一个线程执行_今天我们来聊一聊 Spring 中的线程安全性...
  2. DeepMind开源强化学习环境,灵活可配置,计算资源有限的小型实验室也能用
  3. [整理]MySql批量数据导入Load data infile解决方案
  4. 正式软件工作第一天————MVC、ext JS、和clsa
  5. [.net 面向对象程序设计深入](4)MVC 6 —— 谈谈MVC的版本变迁及新版本6.0发展方向...
  6. 华为系统10.0是鸿蒙吗,暂时忘记鸿蒙!华为EMUI 10.0发布时间确认:这才是主角...
  7. Qt文档阅读笔记-qRegisterMetaType()的原理及其使用
  8. window 2008r2 无法访问 Ox80004005
  9. 当Kubernets遇上阿里云 -之七层负载均衡(一).
  10. linux -初步认识之软件安装
  11. 利用Wireshark分析UDP数据包
  12. java8 时间加一秒_都9012了,Java8中的日期时间API你还没有掌握?
  13. 软件安全需求、设计、测试【归纳】
  14. 浅谈Single-Pass算法
  15. 万亿候苹果,1000000000000 美元的海盗公司 | 摸鱼系列
  16. bno055传感器数据不更新_博世传感器BNO055智能9轴 的绝对方向传感器
  17. Ubuntu 16.04 LTS设置屏幕分辨率并永久保存所设置的分辨率
  18. Android 刘海屏 适配
  19. 绝对值不等式解绝对值二次函数的最值_Simplelife_新浪博客
  20. $route和$router的区别

热门文章

  1. Spring启动和缓存抽象
  2. mfc 弹簧_整合弹簧,速度和瓷砖
  3. Java无处不在:使用DukeScript在任何地方运行一次编写
  4. 摆脱困境:将运行时配置作为JSON返回
  5. jboss4.2.3_JBoss 4.2.x Spring 3 JPA Hibernate教程
  6. 将WildFly绑定到其他IP地址或多宿主上的所有地址
  7. 参数化的JUnit测试
  8. 使用Xtend构建Vaadin UI
  9. python执行linux命令返回结果_python执行linux命令的简单示例
  10. Struts2的控制器(Controller)的工作流程图