帅杨说过,想学好安全,还是得了解开发。
有次遇到了一个properties文件里遇到了druid加密的账号、密码
乍一看,发现不是明文,以为没辙了,但是仔细想想,如果是本地的密码,那么肯定自己能识别,总不能自己都识别不了吧,去查看*.xml文件,在spring里发现了,看到了"druid"字样
后来搜索资料,发现了使用了druid加密,网上能找到的资料也比较少,这里做一个简单的记录
druid加密应该是有两种的,一种直接加密(1.0.16以前),还有一种(1.0.16以后)
0x01 1.0.16以前版本
形如上文提到的形式,只有加密的password
加密:
使用druid的jar对密码进行加密获取字符串
java -cp druid-1.0.15.jar com.alibaba.druid.filter.config.ConfigTools 123456pwd
复制
加密字符串为:
DtZrDfgC+aEicYlH09WoJC6ptuHvj5YQdStXhNHKeV7CvpX5psusl0UDK4236TC0/1GxzdkHE39vPFCkjXLLgA==
解密:
依赖如下:
pom.xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.15</version>
</dependency>
复制
将加密得到的字符串带入ConfigTools.decrypt()进行解密
import com.alibaba.druid.filter.config.ConfigTools;
public class druidOutputpassword {
public static void main(String[] args) throws Exception {
System.out.println(ConfigTools.decrypt("hbZoFfr14R2yGuWJwbUtYdXjF40Df5sXbHSJYzGECsK0p1W4bmrM64SJKU0rmWo+yjUSrtU1Drb+0eGhQT3Xlg=="));
}
}
复制
得到明文密码
0x02 1.0.16以后版本
1.0.16以后版本就有点不一样了,用到了公私钥加密,在配置文件中形如
## 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==
复制
加密:
使用druid的jar对密码进行加密获取字符串
加密后的字符串为:
Obsbr4gd1oVyYr+k4KQdUMNYgKMWdDibsNJTabnph+yPmxjc6tUrT1GNsPDqa9ZvTF9QvaRD86H+Zn/H+yz2jA==
加密的公钥为:
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKHGwq7q2RmwuRgKxBypQHw0mYu4BQZ3eMsTrdK8E6igRcxsobUC7uT0SoxIjl1WveWniCASejoQtn/BY6hVKWsCAwEAAQ==
解密:
依赖如下:
pom.xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.18</version>
</dependency>
复制
将加密后的字符串、加密公钥依次替换cipherText、publicKey
import com.alibaba.druid.filter.config.ConfigTools;
public class druid1016after {
public static void main(String[] args) throws Exception {
String cipherText = "Obsbr4gd1oVyYr+k4KQdUMNYgKMWdDibsNJTabnph+yPmxjc6tUrT1GNsPDqa9ZvTF9QvaRD86H+Zn/H+yz2jA==";
String publicKey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKHGwq7q2RmwuRgKxBypQHw0mYu4BQZ3eMsTrdK8E6igRcxsobUC7uT0SoxIjl1WveWniCASejoQtn/BY6hVKWsCAwEAAQ==";
String decryptPassword = ConfigTools.decrypt(publicKey, cipherText);
System.out.println("decryptPassword:" + decryptPassword);
}
}
复制
可得到明文密码
druid.jar下载链接:
https://repo1.maven.org/maven2/com/alibaba/druid/1.2.8/
https://repo1.maven.org/maven2/com/alibaba/druid/1.0.15/
推荐可以本地试一试,这里也可以回复"druid"到本公众号获取打包好的druid.jar的链接。