个人随笔
目录
配置文件中明文密码改为密文密码的方法
2020-04-03 23:35:59

我们用java链接数据库,不管是web项目还是小程序,都需要把数据库密码写在配置文件中(当然你要写死在程序里也没有办法),或者数据库中,通常源代码漏洞扫描都会告诉你不能有明文密码,那么有什么办法可以变为密文呢?

一、思路如下

写一个非对称加密的工具类,用私钥加密明文,然后把公钥和得到的密文放在配置文件中,代码中读取密码的时候就把公钥和密文读取进来解密后给程序用。

很简单吧!

二、一个实现

这里就举一个实现的例子,直接借用druid提供的工具类来,毕竟我现在的项目数据库连接池都是用阿里的Druid.

1、在pom.xml加入如下依赖

  1. <!-- 阿里druid数据源 -->
  2. <dependency>
  3. <groupId>com.alibaba</groupId>
  4. <artifactId>druid-spring-boot-starter</artifactId>
  5. <version>1.1.9</version>
  6. </dependency>

当然可能老项目的话没有用maven就直接添加如下jar即可;

  1. druid-1.1.9.jar

2、写一个如下工具类

  1. /**
  2. * druid数据库连接池中的密码进行非对称加密,使用方式
  3. * 1、在cmd中执行:java -cp druid-1.1.9.jar com.alibaba.druid.filter.config.ConfigTools 要加密的串
  4. * 2、获取公钥和加密串放到配置文件中(cmd获取方法右键标记,左键选取,按enter就复制到粘贴板了)
  5. * 3、使用的时候,获取公钥和加密串后调用下面的decrypt方法进行解密
  6. * @author lwh
  7. *
  8. */
  9. public class DruidEncryptDecrypt {
  10. public static String decrypt(String publicKey,String encryptPassword) {
  11. try {
  12. return ConfigTools.decrypt(publicKey,encryptPassword);
  13. } catch (Exception e) {
  14. // TODO Auto-generated catch block
  15. e.printStackTrace();
  16. }
  17. return "";
  18. }
  19. }

当然,你也可以直接使用ConfigTools就可以了,不过我这个方便写秘钥生成步骤,你也可以直接用默认的秘钥但是不建议。

2、按工具类中的步骤生成公钥和KEY,如下图所示

获取到publicKey和passwd替换配置文件中的明文密码.

3、修改以前的数据库连接信息读取类,对密码调用DruidEncryptDecrypt进行解密,如下所示:

  1. public String getPassword() {
  2. //这里直接返回解密数据
  3. return DruidEncryptDecrypt.decrypt(publicKey, password);
  4. }

这一步骤可能有人会问了,我在哪里加这个代码,我用spring都是直接在application.xml中加上去的,调用不了java代码啊?

亲,这里有两种办法解决

办法1、如果你是springboot项目,那么你可以百度下springboot整合druid密码加密,那里有集成的,这个不多说。
办法2、你看application.xml中其实就是一个dataSource的bean,你直接抽取出来写成一个配置类即可,可以参考如下我的博文:

SpringBoot2.0整合C3P0、Druid数据库连接池

当然,办法二是很通用的,所以我这里一般选择办法2.

搞定~

感想:要是被别人知道了配置文件也就是知道了密文和公钥,那也是很容易知道真实密码的,所以这个其实在我认为是自欺欺人罢了,还不如把公钥或者明文密码在程序启动的时候参数输入。

 2515

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2