首页 > 代码库 > 用Java实现3DES

用Java实现3DES

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 = http://www.mamicode.com/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));

         }

  } 

用Java实现3DES