1. 程式人生 > >一分鐘教你解密Druid配置加密後的密碼

一分鐘教你解密Druid配置加密後的密碼

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方法就行了。