一、概述
Jasypt 是一個Java庫,允許開發人員以很簡單的方式添加基本加密功能,而無需深入研究加密原理。其具有以下特性:
1、高安全性的,基於標准的加密技術,無論是單向和雙向加密。加密密碼,文本,數字,二進制文件...
2、集成Hibernate的。
3、可集成到Spring應用程序中,與Spring Security集成。
4、集成的能力,用於加密的應用程序(即數據源)的配置。
5、特定功能的高性能加密的multi-processor/multi-core系統。
6、與任何JCE提供者使用開放的API。
這里主要講述與Spring應用程序集成方法。
二、操作步驟
1、加密密碼
從 Jasypt 官網,下載壓縮包,解壓到本地磁盤目錄。在 /jasypt-1.9.2/bin 目錄下有8個文件,encrypt.sh 加密、decrypt.sh 解密。可輸入該命令回車,回顯命令的具體參數信息。下面演示如何加密、解密一個密碼串。
首先演示加密明文密碼串為密文:
[root@oracle ~]#encrypt input=root123 password=::Lazy@8 algorithm=PBEWITHMD5ANDDES
----ENVIRONMENT-----------------
Runtime: Sun Microsystems Inc. Java HotSpot(TM) Client VM 20.6-b01
----ARGUMENTS-------------------
algorithm: PBEWITHMD5ANDDES
input: root123
password: ::Lazy@8
----OUTPUT----------------------
SPtOOLMF8Ildm8TqEaQAuA==
其中,input參數為需要加密的密碼,password參數后加密密碼,algorithm參數為所用的算法,加密后的輸出值為 SPtOOLMF8Ildm8TqEaQAuA==
接下來演示解密密文為明文密碼串:
[root@oracle ~]#decrypt input=SPtOOLMF8Ildm8TqEaQAuA== password=::Lazy@8 algorithm=PBEWITHMD5ANDDES
----ENVIRONMENT-----------------
Runtime: Sun Microsystems Inc. Java HotSpot(TM) Client VM 20.6-b01
----ARGUMENTS-------------------
algorithm: PBEWITHMD5ANDDES
input: SPtOOLMF8Ildm8TqEaQAuA==
password: ::Lazy@8
----OUTPUT----------------------
root123
將上面加密的密碼置換到 input 參數后面,使用 decrypt 命令,則將密文,解密為明文 root123。
2、配置外部文件
在 src/main/resources 目錄下新建jdbc.properties 文件,內容如下:
1 ds.driverClassName=com.mysql.jdbc.Driver 2 ds.url=jdbc:mysql://10.108.1.97:3306/test?useUnicode=true&characterEncoding=UTF-8 3 ds.username=scott 4 ds.password=ENC(SPtOOLMF8Ildm8TqEaQAuA==)
需要注意到第四行配置格式。
3、配置環境變量
設置環境變量 APP_ENCRYPTION_PASSWORD=::Lazy@8
4、配置Spring
1 <bean id="environmentStringPBEConfig" class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig"> 2 <property name="algorithm" value="PBEWITHMD5ANDDES" /> 3 <property name="passwordEnvName" value="APP_ENCRYPTION_PASSWORD" /> 4 </bean> 5 <bean id="standardPBEStringEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor"> 6 <property name="config" ref="environmentStringPBEConfig" /> 7 </bean> 8 <bean class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer"> 9 <constructor-arg ref="standardPBEStringEncryptor" /> 10 <property name="locations"> 11 <list> 12 <value>classpath:jdbc.properties</value> 13 </list> 14 </property> 15 </bean> 16 17 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 18 <property name="driverClassName" value="${ds.driverClassName}" /> 19 <property name="url" value="${ds.url}" /> 20 <property name="username" value="${ds.username}" /> 21 <property name="password" value="${ds.password}" /> 22 </bean>
org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig 基於環境變量配置加密方式,指定按 PBEWITHMD5ANDDES 算法加密,機密密碼來自於環境變量 APP_ENCRYPTION_PASSWORD 的值。這里,有人可能就有疑問了,按照這個方式,有加密密碼,那么破解不是很容易了,因為加密密碼直接暴露出來了啊。嘿嘿,需要說明的是,當應用程序啟動以后,此 環境變量,可直接刪除,那么就可以了。
org.jasypt.encryption.pbe.StandardPBEStringEncryptor 標准串加密器,策略來源於 EnvironmentStringPBEConfig。
org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer 占位符配置,指定加密器和占位符對應的配置文件。