java DES加密

package bank;
import sun.misc.*;
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;

import java.io.UnsupportedEncodingException;
import java.security.Key;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import java.security.spec.AlgorithmParameterSpec;
import java.util.Date;
import java.sql.Timestamp;
/**
 * 使用DES加密和解密的方法 
 * @author:azhong
 *User: Administrator
 * Date: 2007-10-27
 * Time: 10:54:36
 *  */
public class DecryptAndEncrypt {
	public   byte [] DESkey = null;//设置密钥,略�?
	public   byte[] DESIV = null;//设置向量,略�?
	public   String Key1=null;
	public   String Key2=null;
	private AlgorithmParameterSpec iv =null;//加密算法的参数接口,IvParameterSpec是它的一个实�?
	private Key key =null;
	
 public static void main(String[] args) {
			// TODO Auto-generated method stub
	    	String s1=Encrypt("fhnewfew", "fHezg0ouyQ4=", "gSIoPdlJGgY=");
	    	 System.out.println(s1);
	    	 //28r2N5Yf23lMdbYpUpmJ8ZJ7A0PvXtUgt0D2iecGAx1IfJ2MU8Pvitow38I4UGps
	      String s2="";
	    	 s2=Decrypt(s1,"fHezg0ouyQ4=","gSIoPdlJGgY=");
	    	System.out.println(s2);
}
 
public static String Encrypt(String Date, String Key1, String Key2)//加密 // NOPMD by Administrator on 13-4-12 ����4:01
{
		String Result=null;
		DecryptAndEncrypt dae=new DecryptAndEncrypt(Key1,Key2);
		
		try {
			Result= dae.encode(Date);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return Result;
}
public static String Decrypt(String Date, String Key1, String Key2)//解密
{
		String Result=null;
		DecryptAndEncrypt dae=new DecryptAndEncrypt(Key1,Key2);
		try {
			Result= dae.decode(Date);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	
	 return Result;
}
		
public static String getMD5Str(String str) {
      MessageDigest messageDigest=null;
      try
        {
          messageDigest=MessageDigest.getInstance("MD5");
          messageDigest.reset();
          messageDigest.update(str.getBytes("UTF-8"));
        }
      catch(NoSuchAlgorithmException e)
        {
          System.out.print("NoSuchAlgorithmException caught!");
          System.exit(-1);
        }
      catch(UnsupportedEncodingException e)
        {
          e.printStackTrace();
        }
      byte[] byteArray=messageDigest.digest();
      StringBuffer md5StrBuff=new StringBuffer();
      for(int i=0;i<byteArray.length;i++)
        {
          if(Integer.toHexString(0xFF&byteArray[i]).length()==1)
            md5StrBuff.append("0").append(Integer.toHexString(0xFF&byteArray[i]));
          else
            md5StrBuff.append(Integer.toHexString(0xFF&byteArray[i]));
        }
      return md5StrBuff.toString();
    }
		
public  DecryptAndEncrypt( String Key1, String Key2)
{ 
    try 
    {
        //encrypt.Key1 = Key1;
        //encrypt.Key2 = Key2;
        /*--------转换FromBase64String-------------*/
      
        BASE64Decoder base64Decoder = new BASE64Decoder(); 
    // byte[] pasByte=deCipher.doFinal(base64Decoder.decodeBuffer(data));

        this.DESkey=base64Decoder.decodeBuffer(Key1);
        this.DESIV=base64Decoder.decodeBuffer(Key2);
     
     
		DecryptAndEncryptCreate();
	} 
    catch (Exception e)
    {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

    public void DecryptAndEncryptCreate() throws  Exception {
         DESKeySpec keySpec = new DESKeySpec(DESkey);//设置密钥参数
         iv = new IvParameterSpec(DESIV);//设置向量
         SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");//获得密钥工厂
         key = keyFactory.generateSecret(keySpec);//得到密钥对象

    }
public String encode(String data) throws Exception{
    	Date datetime = new Date();
    	data+=getMD5Str(new Timestamp(datetime.getTime()).toString()+(int)(1+Math.random()*(1000-1+1)));
        Cipher enCipher  =  Cipher.getInstance("DES/CBC/PKCS5Padding");//得到加密对象Cipher
        enCipher.init(Cipher.ENCRYPT_MODE,key,iv);//设置工作模式为加密模式,给出密钥和向�?
        byte[] pasByte = enCipher.doFinal(data.getBytes("utf-8"));//
        BASE64Encoder base64Encoder = new BASE64Encoder();        
        return base64Encoder.encode(pasByte);
    }

public String decode(String data) throws Exception{
    Cipher deCipher   =  Cipher.getInstance("DES/CBC/PKCS5Padding");
    deCipher.init(Cipher.DECRYPT_MODE,key,iv);
       BASE64Decoder base64Decoder = new BASE64Decoder();

    byte[] pasByte=deCipher.doFinal(base64Decoder.decodeBuffer(data));
    String result=new String(pasByte,"UTF-8");
	        result=result.substring(0, result.length()-32);
	        return result;
	    }
}

你可能感兴趣的:(java DES加密)