系統一般爲了安全,會對數據庫進行加密,原理就是對數據庫的賬號密碼等加密,然後訪問數據庫的時候,發現密碼裏面有特殊值,就進行解密。常見的加密方式有 druid 和 mybatis-plus 的方式。
mybatis-plus 的方式
YML 配置:
// 加密配置 mpw: 開頭緊接加密內容( 非數據庫配置專用 YML 中其它配置也是可以使用的 )
spring:
datasource:
url: mpw:qRhvCwF4GOqjessEB3G+a5okP+uXXr96wcucn2Pev6Bf1oEMZ1gVpPPhdDmjQqoM
password: mpw:Hzy5iliJbwDHhjLs1L0j6w==
username: mpw:Xb+EgsyuYRXw7U7sBJjBpA==
密鑰加密:
// 生成 16 位隨機 AES 密鑰
String randomKey = AES.generateRandomKey();
// 隨機密鑰加密
String result = AES.encrypt(data, randomKey);
如何使用:
// Jar 啓動參數( idea 設置 Program arguments , 服務器可以設置爲啓動環境變量 )
--mpw.key=d1104d7c3b616f0b
在idea中使用,
在啓動文件中使用
java -jar xxx.jar --mpw.key=d1104d7c3b616f0b
druid的方式。(參考:https://www.cnblogs.com/penghq/p/11162572.html)
1、阿里默認只對用戶密碼解密
2、druid 1.0.16版本及以上的解密時需要同時配置publicKey
一.生成密文密碼
1 前提:已經配置了jdk環境
1、生成密文密碼需要準備druid的jar包.然後通過命令行生成,如下步驟:
1.1準備jar包
1、(示例使用 druid-0.2.23.jar),放到某目錄下,且打開命令窗口(win用戶可以在目錄的空白處 shift+鼠標右鍵 打開命令窗口);
1.2.輸入命令:
java -cp druid-0.2.23.jar com.alibaba.druid.filter.config.ConfigTools you_password
我要加密的密碼是:123456pwd
注意:druid 1.0.16之前
java -cp druid-0.2.23.jar com.alibaba.druid.filter.config.ConfigTools 123456pwd
注意:druid 1.0.16及以後
java -cp druid-1.1.9.jar com.alibaba.druid.filter.config.ConfigTools 123456pwd >aaa.txt
二、dataSource配置 注意:druid 1.0.16之前
1.1jdbc.properties
## JDBC set jdbc.url=jdbc\:mysql\://localhost\:3306/edu_demo?useUnicode\=true&characterEncoding\=utf-8 jdbc.username=root jdbc.password=Obsbr4gd1oVyYr+k4KQdUMNYgKMWdDibsNJTabnph+yPmxjc6tUrT1GNsPDqa9ZvTF9QvaRD86H+Zn/H+yz2jA\=\=
1.2dataSource配置
<!-- 基於Druid數據庫鏈接池的數據源配置 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <!-- 基本屬性driverClassName、 url、user、password --> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- 配置初始化大小、最小、最大 --> <!-- 通常來說,只需要修改initialSize、minIdle、maxActive --> <property name="initialSize" value="2" /> <property name="minIdle" value="2" /> <property name="maxActive" value="30" /> <property name="testWhileIdle" value="false" /> <!-- 配置獲取連接等待超時的時間 --> <property name="maxWait" value="5000" /> <!-- 配置一個連接在池中最小生存的時間,單位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="30000" /> <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連接,單位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="60000" /> <!-- 解密密碼必須要配置的項 --> <property name="filters" value="config" /> <property name="connectionProperties" value="config.decrypt=true" /> </bean>
注意:druid 1.0.16及以後
2.1jdbc.properties
## JDBC set jdbc.url=jdbc\:mysql\://localhost\:3306/edu_demo?useUnicode\=true&characterEncoding\=utf-8 jdbc.username=root jdbc.password=Obsbr4gd1oVyYr+k4KQdUMNYgKMWdDibsNJTabnph+yPmxjc6tUrT1GNsPDqa9ZvTF9QvaRD86H+Zn/H+yz2jA\=\= jdbc.publickey = MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKHGwq7q2RmwuRgKxBypQHw0mYu4BQZ3eMsTrdK8E6igRcxsobUC7uT0SoxIjl1WveWniCASejoQtn/BY6hVKWsCAwEAAQ==
2.2dataSource配置
<!-- 基於Druid數據庫鏈接池的數據源配置 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <!-- 基本屬性driverClassName、 url、user、password --> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- 解密密碼必須要配置的項 --> <property name="filters" value="config" /> <property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${jdbc.publickey}" /> <!-- 配置初始化大小、最小、最大 --> <!-- 通常來說,只需要修改initialSize、minIdle、maxActive --> <property name="initialSize" value="2" /> <property name="minIdle" value="2" /> <property name="maxActive" value="30" /> <property name="testWhileIdle" value="false" /> <!-- 配置獲取連接等待超時的時間 --> <property name="maxWait" value="5000" /> <!-- 配置一個連接在池中最小生存的時間,單位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="30000" /> <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連接,單位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="60000" /> </bean>