druid 对于数据源加密的两种方式 20254646编辑
Heaven helps those who help themselves
资深码农+深耕理财=财富自由
欢迎关注
资深码农+深耕理财=财富自由
欢迎关注

druid 对于数据源加密的两种方式
Created by Marydon on 2022-02-26 13:48
1.情景展示
在web开发过程中,数据库连接我们通常使用阿里的druid配置连接池。
通常会在application.yml或者application.properties文件当中配置数据源(数据库地址、用户名和密码),由于这些都直接暴露在配置文件当中,具有安全隐患。
能不能对这些信息进行加密呢?
2.具体分析
加密的目的是:为了提高数据的安全性;
要想实现需要保证两个流程:
第一,数据源需要配置加密结果(密文);
第二,Druid进行数据库连接的时候需要先解密,拿到解密结果(明文)去进行数据库连接。
3.解决方案
方式一:jasypt(推荐使用)
实现方式,见文末推荐。
可以对数据库连接、用户名和密码同时加密,使用方便。
方式二:Druid自带加密类
druid支持对数据源进行加密(但,默认只能对用户的密码进行解密)。
如果我们强行对用户名进行加密,将会启动不起来。
所用算法:RSA/ECB/PKCS1Padding,也就是RSA算法。
下面说说具体实现步骤:
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
按回车键运行,将运行结果复制到记事本中。
将公钥和密码配置到你的配置文件当中。
写在最后
哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!
相关推荐:
与君共勉:最实用的自律是攒钱,最养眼的自律是健身,最健康的自律是早睡,最改变气质的自律是看书,最好的自律是经济独立 。
您的一个点赞,一句留言,一次打赏,就是博主创作的动力源泉!
↓↓↓↓↓↓写的不错,对你有帮助?赏博主一口饭吧↓↓↓↓↓↓
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/15938914.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
2018-02-26 壁纸推荐2018