使用 Jasypt 保護數據庫配置


一、概述

    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 占位符配置,指定加密器和占位符對應的配置文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM