ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

druid 对于数据源加密的两种方式

2022-02-26 14:02:32  阅读:264  来源: 互联网

标签:加密 数据源 decrypt druid com config


1.情景展示

在web开发过程中,数据库连接我们通常使用阿里的druid配置连接池。

通常会在application.yml或者application.properties文件当中配置数据源(数据库地址、用户名和密码),由于这些都直接暴露在配置文件当中,具有安全隐患。

能不能对这些信息进行加密呢?

2.具体分析

加密的目的是:为了提高数据的安全性;

要想实现需要保证两个流程:

第一,数据源需要配置加密结果(密文);

第二,Druid进行数据库连接的时候需要先解密,拿到解密结果(明文)去进行数据库连接。

3.解决方案

方式一:jasypt(推荐使用)

实现方式,见文末推荐。

可以对数据库连接、用户名和密码同时加密,使用方便。

方式二:Druid自带加密类

druid支持对数据源进行加密(但,默认只能对用户的密码进行解密)。

如果我们强行对用户名进行加密,将会启动不起来。

下面说说具体实现步骤:

Druid对数据源进行加密或者解密,调用的是:

druid.jar里com.alibaba.druid.filter.config包下的ConfigTools.class类。

第一步:创建一个类并继承ConfigTools;

import com.alibaba.druid.filter.config.ConfigTools;
/**
 * 阿里Druid密码加密测试类
 * @description:
 * @author: Marydon
 * @date: 2022-02-26 11:11
 * @version: 1.0
 * @email: marydon20170307@163.com
 */
public class DruidEncryptorTest extends ConfigTools {
    public static void main(String[] args) throws Exception {
        // 生成公钥和私钥
        String[] arr = genKeyPair(512);
        String privateKey = arr[0];
        System.out.println("privateKey:" + privateKey);
        String publicKeyText = arr[1];
        System.out.println("publicKey:" + publicKeyText);

        // 待加密信息
        String password = "marydon";
        // 加密结果
        String cipherText = encrypt(privateKey, password);
        System.out.println("加密结果:" + cipherText);

        // 解密
        System.out.println("解密结果:" + decrypt(publicKeyText, cipherText));
    }
}

运行此类,拿到:公钥和加密结果(每次运行,生成的公钥和私钥都不同,自然加密结果也不一样)。

第二步:数据库配置。

####spring配置####
####开发环境数据源配置
spring:
  ###数据库配置
  datasource:
    ##数据库地址(默认端口号:3306)
    url: jdbc:mysql://127.0.0.1:3306/mysql?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai
    ##用户名
    username: scott
    ##密码
    password: KnXPGXrnmOLJ8A5srN5m0rfGmrseJu8+Fb4/f4LIMGVK6cHjp1k71NSUjO0U8rZM+YtigCyPZMudPpAwps5U3w==
    ##JDBC驱动程序的全称
    driver-class-name: com.mysql.cj.jdbc.Driver
    ##数据源解密公钥(自定义属性)
    publickey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKAbVEPhUymXGfF0QO3YDcqKkwXOYj5FfxYGVgfX1MUEixgQeCtZm/LDXuqYi7zR26FJGJ5JFhEAwJ+DK+P3wzsCAwEAAQ==
    ###druid配置
    druid:
      #要想解密生效,必须得有config
      #多个之间使用逗号隔开:config,stat,wall
      filters: config
      connection-properties: "config.decrypt=true;config.decrypt.key=${spring.datasource.publickey}"

说明:

第一:将密码替换成加密后的密码;

第二:publickey是自定义属性,你可以放置配置文件当中任意位置,只要能确保到可以通过${}获取的到;

第三:druid需要配置两个属性。

filter的值必须包含config,如果需要制定多个,使用逗号隔开即可。

connection-properties的值可以是:"config.decrypt=true;config.decrypt.key=${spring.datasource.publickey}"

也可以是:"config.decrypt=true;config.decrypt.key=publickey的值",此时,可以把上面的自定义属性publickey删掉。

4.其它

如果不想使用第一步的话,那就用调用jar包类的方式生成秘钥。

首先,确保你的电脑上有java包,可以运行java命令。

其次,需要知道druidjar所在全路径(绝对路径)

语法:

java -cp  你的druid包全路径   com.alibaba.druid.filter.config.ConfigTools  你要加密的密码

java -cp D:\repository-maven\com\alibaba\druid\1.1.22\druid-1.1.22.jar com.alibaba.druid.filter.config.ConfigTools marydon

按回车键运行,将运行结果复制到记事本中。

将公钥和密码配置到你的配置文件当中。 

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

标签:加密,数据源,decrypt,druid,com,config
来源: https://www.cnblogs.com/Marydon20170307/p/15938914.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有