程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java DES加密解密實現教程

Java DES加密解密實現教程

編輯:關於JAVA
 

盡管DES現在已經基本被AES替代,但畢竟DES速度更快,在一些低級別的加密解密應用場合還是非常適合,Java DES加密解密應用方法跟前一篇的AES類似,都很簡單,網上也有很多類似文章,不過都是把編碼轉換、內容長度判斷等眾多本不屬於算法本身的因素寫到一起,導致代碼太多反倒不好理解。本文基本算是最簡化的Java DES加密解密。

基礎閱讀:

Java AES加密解密實現

AES CBC和CTR加解密實例

AES CFB/OFB/ECB/CBC/CTR優缺點

Java DES加密解密示例代碼如下:

import java.security.SecureRandom;
import java.security.Key;
import java.security.Security;

import javax.crypto.SecretKey;  
import javax.crypto.SecretKeyFactory;
import javax.crypto.KeyGenerator;
import javax.crypto.Cipher;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.SecretKeySpec;
import javax.crypto.spec.IvParameterSpec;

//AES 128
public class ComCipher {
	private byte[] btDESPwd	= new byte[8];//8 passwords
	private byte[] btDESIV	= new byte[8];//8 iv
	private Cipher 		  	cObj;
	private SecretKey  		sDesPwd;
	private IvParameterSpec ivDesIps;
	private SecureRandom sr = new SecureRandom(); 
	
	public ComCipher(){
		int i=0;
		for(i=0;i<8;i++)
			btDESPwd[i]=0x01;
	}

	public void DESInit()  throws Exception {
		DESKeySpec dks = new DESKeySpec(btDESPwd);
		SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
		sDesPwd  = keyFactory.generateSecret(dks);	
		ivDesIps = new IvParameterSpec(btDESIV);
		cObj = Cipher.getInstance("DES/CBC/NoPadding");//NoPadding PKCS5Padding
	}
	
	//DES Encrypt
    public byte[] DESEncrypt(byte[] btCont)  throws Exception{            
    	cObj.init(Cipher.ENCRYPT_MODE, sDesPwd,ivDesIps,sr);
        return cObj.doFinal(btCont);
    }

    //DES Decrypt
    public byte[] DESDecrypt(byte[] btCont)  throws Exception{
    	cObj.init(Cipher.DECRYPT_MODE, sDesPwd,ivDesIps,sr);
        return cObj.doFinal(btCont);
    }
}

調用示例如下:

要求內容長度必須為8Byte整數倍(上述Instance示例為NoPadding),如果需要Padding可對應修改,開啟Padding後內容長度就無限制。

	ComCipher ObjCipher = new ComCipher();
	try {
		int iLen=8;
		byte[] c1 = new byte[iLen];
		for(int k=0;k<iLen;k++)
			c1[k]=0x01;			
		
		ObjCipher.DESInit();			
		System.out.println("Source:"+HexToString(c1,iLen));
	        byte[] resA = ObjCipher.DESEncrypt(c1);
		System.out.println("DESEnc:"+HexToString(resA,resA.length));
	        byte[] resB = ObjCipher.DESDecrypt(resA);
		System.out.println("DESDec:"+HexToString(resB,resB.length));
	} catch (Exception e1) {
             e1.printStackTrace();
	}	
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved