JAVA使用DES加密算法加密解密

程序中使用了.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測試裏面寫加密的語句用來對數據庫密碼進行加密。

相關文章
相關標籤/搜索