一分鐘教你解密Druid配置加密後的密碼
阿新 • • 發佈:2018-12-24
Druid是阿里巴巴開源平臺上的一個數據庫連線池。網上很多資料都是關於Druid資料來源的配置與使用,卻一直找不到一篇文章教人解密。本文教你如何解密Druid配置檔案中加密後的密碼。
問題背景:
專案組裡有個資料庫連線配置檔案,裡面的內容是加密後的密碼和一個公鑰。如下:
公鑰:
publickey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKUAMHrATatXwODDAcHxfIcG6diYsw0l0Qfj/NJivHXMVs5JRYf4vao2nEXB+BxA3gHO0er3KiGpz2ieQjPgSF8CAwEAAQ==
加密以後的密碼:
password =Q+zSOJytnRLmFHxB9YdFXlMnJj2y60r0Z11OFTRTOYQ/4kzKDWIU6AtFUv+DeVLuitKPGXGIkmalAXaoApOlzw==
有個同事想根據此資訊得到資料庫的連線密碼,怎麼解決?
解決方法:
使用ConfigTools.decrypt(publicKey,password)方法即可。(要放在有druid-1.0.12.jar的專案上執行)
public class ConfigToolsTest extends TestCase {
public void test_0() throws Exception {
String publickey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKUAMHrATatXwODDAcHxfIcG6diYsw0l0Qfj/NJivHXMVs5JRYf4vao2nEXB+BxA3gHO0er3KiGpz2ieQjPgSF8CAwEAAQ==" ;
String password = "Q+zSOJytnRLmFHxB9YdFXlMnJj2y60r0Z11OFTRTOYQ/4kzKDWIU6AtFUv+DeVLuitKPGXGIkmalAXaoApOlzw==";
System.out.println( ConfigTools.decrypt(publickey, password) );
}
至此,問題解決。
解決問題過程分享:
如何成為一名優秀的軟體工程師,我認為解決實際問題的能力很重要。下面是我如何分析和解決這個問題的過程,希望以小見大,讓更多的人擁有解決問題的思路, 而不僅僅是知道答案本身。
首先,專案能連結上資料庫,程式肯定有個解密過程,找到該加密解密程式成為關鍵。根據資料庫配置檔案找到載入該檔案的Spring配置檔案。
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
...
...
<property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${publickey}" />
</bean>
然後,上網搜尋DruidDataSource加密解密相關資料,發現是阿里巴巴的開源專案,並且很多資料提及ConfigTools,但是大部分資料都是教人如何配置加密密碼等等 (估計是因為原始碼沒有放開解密方法,沒人看原始碼)。
於是,我下載了Druid在Github裡的原始碼,並找到了ConfigToolsTest.java檔案。
接著,答案很快就找到了,ConfigTools有個encrypt和decrypt方法。那麼就直接在專案裡執行一下decrypt方法就行了。