3DES,即三重DES,是DES的加強版,也是DES的一個更安全的變形。它使用3個56位(共168位)的密鑰對數據進行三次加密,和DES相比,安全性得到了較大的提高。
實際上,3DES是一個過渡的加密算法。1999年,NIST將3-DES指定為DES向AES過渡的加密標準。
3DES以DES為基本模塊,通過組合分組方法設計出分組加密算法。若三個密鑰互不相同,本質上就相當于用一個長為168位的密鑰進行加密,大大加強了數據的安全性。
若數據對安全性要求不高,可以讓其中的兩個密鑰相等,這樣,密鑰的有效長度也有112位。
在Java的加密體系中,使用3DES非常簡單,程序結構和使用DES時相同,只不過在初始化時將算法名稱由"DES"改為"DESede"即可。
下列程序基本原理和P12_01相同,只不過將加密和解密過程寫在一起。
import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
public class P12_02 {
public static void main(String[] args) throws Exception {
//KeyGenerator提供對稱密鑰生成器的功能,支持各種算法
KeyGenerator keygen;
//SecretKey負責保存對稱密鑰
SecretKey deskey;
//Cipher負責完成加密或解密工作
Cipher c;
Security.addPRovider(new com.sun.crypto.provider.SunJCE());
//實例化支持3DES算法的密鑰生成器,算法名稱用DESede
keygen = KeyGenerator.getInstance("DESede");
//生成密鑰
deskey = keygen.generateKey();
//生成Cipher對象,指定其支持3DES算法
c = Cipher.getInstance("DESede");
String msg = "郭克華_安全編程技術";
System.out.println("明文是:" + msg);
//根據密鑰,對Cipher對象進行初始化,ENCRYPT_MODE表示加密模式
c.init(Cipher.ENCRYPT_MODE, deskey);
byte[] src = msg.getBytes();
//加密,結果保存進enc
byte[] enc = c.doFinal(src);
System.out.println("密文是:" + new String(enc));
//根據密鑰,對Cipher對象進行初始化,ENCRYPT_MODE表示加密模式
c.init(Cipher.DECRYPT_MODE, deskey);
//解密,結果保存進dec
byte[] dec = c.doFinal(enc);
System.out.println("解密后的結果是:"+ new String(dec));
}
}
新聞熱點
疑難解答