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


程序中使用了.properties文件作為參數配置文檔,好處是靈活配置各項參數

一旦對數據庫的一些參數進行了配置,勢必涉及數據庫的IP,端口,用戶名和密碼

properties文件全是unicode編碼明文存儲,程序打包交付后,其他人能夠很容易使用解壓軟件打開jar查看你的.properties文件

所以一些敏感變量需要加密處理

首先需要了解一些基本的加密算法,比如MD5,比如DES和RSA

 

MD5是一種不可逆的加密算法,使用散列后特征碼的方式表現需要加密的字符或者文件,常用在系統登陸的密碼比對中

將MD5碼存儲在數據庫中,用戶登陸時將用戶輸入的字符散列成MD5后於數據庫中的密文進行比對

不可逆的加密算法有一種好處就是,即使后台數據庫被攻破了,對方拿這些MD5散列密文也毫無辦法求得明文

 

DES和RSA都是可逆的加密算法,也就是可以通過密鑰和密文解開得到明文,其中最常見的64位輪轉DES算法

在JAVA的JDK中提供了先天性的良好的加密支持,其中就包括大名鼎鼎的DES

下面一個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測試里面寫加密的語句用來對數據庫密碼進行加密。


免責聲明!

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



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