使用Jasypt對數據庫配置文件進行加密

  在Spring配置文件中常使用佔位符(placeholder )來加載資源文件,經常一些資源文件都是已明文形式存放的,好比jdbc配置信息等,從系統安全角度來講,這些信息已明文形式顯示老是很差。今天接觸Jasypt,查了一些資料學習了下。Jasypt 是sourceforge.net上的一個開源項目,是一個Java庫。更多介紹自行google吧。算法

第一步,加入Jasypt依賴。這裏咱們使用maven。spring

<dependency>
    <groupId>org.jasypt</groupId>
    <artifactId>jasypt</artifactId>
    <version>1.8</version>
</dependency>

加密:安全

@Test
public void encrypt() {
    // 建立加密器
    StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
    // 配置
    EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
    config.setAlgorithm("PBEWithMD5AndDES");// 加密算法
    config.setPassword("fuyung");// 系統屬性值
    encryptor.setConfig(config);

    String plaintext = "root"; //明文
    String ciphertext = encryptor.encrypt(plaintext); // 加密
    System.out.println(plaintext + " : " + ciphertext);// 運行結果:root : 8y9G4kIZQuCHB78mMJNkHw==
}

解密:maven

@Test
public void decrypt() {
    StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
    EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
        config.setAlgorithm("PBEWithMD5AndDES");
    config.setPassword("fuyung");
    encryptor.setConfig(config);
    String ciphertext = "8y9G4kIZQuCHB78mMJNkHw==";// 密文

    //解密
    String plaintext = encryptor.decrypt(ciphertext); // 解密
    System.out.println(ciphertext + " : " + plaintext);// 運行結果:8y9G4kIZQuCHB78mMJNkHw== : root
}

與Spring集成。在Spring的配置文件裏面加入以下代碼:學習

<bean id="propertyConfigure"
      class="org.jasypt.spring.properties.EncryptablePropertyPlaceholderConfigurer">
    <constructor-arg ref="configurationEncryptor"/>

    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
    <property name="ignoreResourceNotFound" value="true"/>
    <property name="locations">
        <list>
            <value>classpath:jdbc.properties</value>
        </list>
    </property>
</bean>
<bean id="configurationEncryptor"
      class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
    <property name="config" ref="environmentVariablesConfiguration"/>
</bean>

<bean id="environmentVariablesConfiguration"
      class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
    <property name="algorithm" value="PBEWithMD5AndDES"/>
    <property name="password" value="clm"/>
</bean>

在看一下jdbc.properties文件:google

jdbc.username=ENC(kpKWmxAX2LMUqqkKPCulpTimxznTDxXw)
jdbc.password=ENC(Wg/U1YMQOznH4WyP7HpTTJL0v1KGFLIC)

記得在你的密文前加上ENC前綴,並用()包起來。爲何要這樣寫,查看源碼便知:加密

這樣子在啓動Spring容器的時候就會讀取到加密的值就會自動進行解密了。spa

相關文章
相關標籤/搜索