程序中使用了.properties文件做爲參數配置文檔,好處是靈活配置各項參數java
一旦對數據庫的一些參數進行了配置,勢必涉及數據庫的IP,端口,用戶名和密碼算法
properties文件全是unicode編碼明文存儲,程序打包交付後,其餘人可以很容易使用解壓軟件打開jar查看你的.properties文件數據庫
因此一些敏感變量須要加密處理數組
首先須要瞭解一些基本的加密算法,好比MD5,好比DES和RSAdom
MD5是一種不可逆的加密算法,使用散列後特徵碼的方式表現須要加密的字符或者文件,經常使用在系統登錄的密碼比對中函數
將MD5碼存儲在數據庫中,用戶登錄時將用戶輸入的字符散列成MD5後於數據庫中的密文進行比對測試
不可逆的加密算法有一種好處就是,即便後臺數據庫被攻破了,對方拿這些MD5散列密文也毫無辦法求得明文編碼
DES和RSA都是可逆的加密算法,也就是能夠經過密鑰和密文解開獲得明文,其中最多見的64位輪轉DES算法加密
在JAVA的JDK中提供了先天性的良好的加密支持,其中就包括大名鼎鼎的DEScode
下面一個DESHelper類展現瞭如何將密文解開獲得明文的方法
package com.newflypig.des; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import sun.misc.BASE64Decoder; /** * 處理數據庫密碼的密文轉明文類 * @author newflypig * time:2015年10月30日 * TODO * */ public class DESHelper { /** * Description 根據鍵值進行解密 * @param data * @param key 加密鍵byte數組 * @return * @throws Exception */ private static byte[] decrypt(byte[] data, byte[] key) throws Exception { // 生成一個可信任的隨機數源 SecureRandom sr = new SecureRandom(); // 從原始密鑰數據建立DESKeySpec對象 DESKeySpec dks = new DESKeySpec(key); // 建立一個密鑰工廠,而後用它把DESKeySpec轉換成SecretKey對象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey securekey = keyFactory.generateSecret(dks); // Cipher對象實際完成解密操做 Cipher cipher = Cipher.getInstance("DES"); // 用密鑰初始化Cipher對象 cipher.init(Cipher.DECRYPT_MODE, securekey, sr); return cipher.doFinal(data); } public static String decrypt(String data, String key) throws Exception { if (data == null) return null; BASE64Decoder decoder = new BASE64Decoder(); byte[] buf = decoder.decodeBuffer(data); byte[] bt = decrypt(buf, key.getBytes()); return new String(bt); } }
如需對加密算法有更深入的瞭解,能夠自行研究實現原理,對於敏捷開發這裏只須要不求甚解的運用就好了,記得保護好你的key也就是密鑰
一開始提到的須要將properties文件中的參數解開獲得明文,想必你應該已經知道該使用哪一種加密算法了吧
對了,就是上面的DES加密算法,這裏只提供瞭解密,由於不須要在程序中提供加密函數
各位能夠本身編寫本身的加密函數,或者能夠在本身的JUnit測試裏面寫加密的語句用來對數據庫密碼進行加密。