java利用des和md5进行加密

package com.routon.utils;

import java.security.InvalidKeyException;
import java.security.Key;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

import android.util.Log;

/**
 * encryption and decryption tool
 * eg:
 *  (一、3des)
 *  byte[] encdata = utilSecurity.utilEncryptWith3DES("123456789abc","test".getBytes(),1);
 *  byte[] decdata = utilSecurity.utilEncryptWith3DES("123456789abc",encdata,2);
 *  
 *  (二、des)
 *  String encdata = utilSecurity.utilEncryptWithDESECB("123456789","data",1);
 *  String decdata = utilSecurity.utilEncryptWithDESECB("123456789",encdata,2);
 *   
 *  (三、32md5)
 *  String encdata = utilSecurity.utilEncryptWithMD5_32("data");
 *  
 *  (四、16md5)
 *  String encdata = utilSecurity.utilEncryptWithMD5_16("data");
 * @author xuweilin
 *
 */
public class utilSecurity {
	private static String TAG = "utilSecurity";
	/**
	 * use 3des Algorithm
	 * @param a_pKey  secret
	 * @param a_pInput input string
	 * @param a_iMode 1:enc;2:dec
	 * @return output
	 */
   public static byte[] utilEncryptWith3DES(String a_pKey, byte[] a_pInput, int a_iMode){
	   final String hexString="0123456789ABCDEF";
	   final String Algorithm = "DESede";
	   byte[] output = null;
	   byte[] bytes=a_pKey.getBytes(); 
	   StringBuilder sb=new StringBuilder(bytes.length*2); 

	   for(int i=0;i<bytes.length;i++) 
	   { 
	   sb.append(hexString.charAt((bytes[i]&0xf0)>>4)); 
	   sb.append(hexString.charAt((bytes[i]&0x0f)>>0)); 
	   } 
	    
	   byte[] keyBytes =sb.toString().getBytes(); 
	   try {
		   SecretKey deskey = new SecretKeySpec(keyBytes, Algorithm);
		   Cipher c1 = Cipher.getInstance(Algorithm);
		if(a_iMode == 1){
			 c1.init(Cipher.ENCRYPT_MODE, deskey);
		}else if(a_iMode == 2){
			c1.init(Cipher.DECRYPT_MODE, deskey);
		}
		    output = c1.doFinal(a_pInput);
		}catch (java.lang.Exception e) {
			Log.e(TAG, "utilEncryptWith3DES exception:"+e.getMessage());
		}
		return output;
   }
   /**
    * use des Algorithm
    * @param a_pKey  secret
    * @param a_pInput input string
    * @param a_iMode 1:enc;2:dec
    * @return output
    */
   public static String utilEncryptWithDESECB(String a_pKey, String a_pInput, int a_iMode){
	   Key key = getKey(a_pKey.getBytes());
	   String output = null;
	   if(a_iMode == 1){
		   output = getEncriptCode(key, a_pInput);
	   }else if(a_iMode == 2){
		   output = getDecriptCode(a_pInput, key);
	   }
	   return output;
   }
   /**
   * define key
   */
   private static Key getKey(byte[] keyByte) {
      Key key = null;
      byte[] byteTemp = new byte[8];
      for (int i = 0; i < byteTemp.length && i < keyByte.length; i++) {
       byteTemp[i] = keyByte[i];
      }
      key = new SecretKeySpec(byteTemp, "DES");
      return key;
   }

   /**
   * @param key
   * @return 
   */
   private static String getEncriptCode(Key key, String srcCode) {
      StringBuffer sb = null;

      try {
       Cipher encriptCipher = Cipher.getInstance("DES");
       encriptCipher.init(Cipher.ENCRYPT_MODE, key);
       byte[] desCode = encriptCipher.doFinal(srcCode.getBytes());
       sb = new StringBuffer(desCode.length * 2);
       for (int i = 0; i < desCode.length; i++) {
        int temp = desCode[i];
        if (temp < 0) {
         temp = temp + 256;
        }
        
        if (temp < 16) {
         sb.append("0");
        }
        sb.append(Integer.toString(temp, 16));
       }

      } catch (NoSuchAlgorithmException e) {
    	  Log.e(TAG, "getEncriptCode exception:"+e.getMessage());
      } catch (NoSuchPaddingException e) {
    	  Log.e(TAG, "getEncriptCode exception:"+e.getMessage());
      } catch (InvalidKeyException e) {
    	  Log.e(TAG, "getEncriptCode exception:"+e.getMessage());
      } catch (IllegalBlockSizeException e) {
    	  Log.e(TAG, "getEncriptCode exception:"+e.getMessage());
      } catch (BadPaddingException e) {
    	  Log.e(TAG, "getEncriptCode exception:"+e.getMessage());
      }
      return sb.toString();
   }

   private static String getDecriptCode(String encriptCode, Key key) {
      Cipher decriptCipher = null;
      String decriptString = null;
      byte[] encriptByte = encriptCode.getBytes();

      byte[] decriptByte = new byte[encriptByte.length / 2];
      for (int i = 0; i < encriptByte.length; i+=2) {
       String strTmp = new String(encriptByte, i, 2);
       decriptByte[i / 2] = (byte) Integer.parseInt(strTmp, 16);
      }
      try {
       decriptCipher = Cipher.getInstance("DES");
       decriptCipher.init(Cipher.DECRYPT_MODE, key);
       byte[] outByte = decriptCipher.doFinal(decriptByte);
       decriptString = new String(outByte);
      } catch (NoSuchAlgorithmException e) {
    	  Log.e(TAG, "getDecriptCode exception:"+e.getMessage());
      } catch (NoSuchPaddingException e) {
    	  Log.e(TAG, "getDecriptCode exception:"+e.getMessage());
      } catch (InvalidKeyException e) {
    	  Log.e(TAG, "getDecriptCode exception:"+e.getMessage());
      } catch (IllegalBlockSizeException e) {
    	  Log.e(TAG, "getDecriptCode exception:"+e.getMessage());
      } catch (BadPaddingException e) {
    	  Log.e(TAG, "getDecriptCode exception:"+e.getMessage());
      }
      return decriptString;
   }
   /**
    * MD5
    * @param a_pInput input string
    * @return 32 length encrp string
    */
  public static String utilEncryptWithMD5_32(String a_pInput){
	  String output = null;
		try { 
			MessageDigest md = MessageDigest.getInstance("MD5"); 
			md.update(a_pInput.getBytes()); 
			byte b[] = md.digest(); 
			int i; 
			StringBuffer buf = new StringBuffer(""); 
			for (int offset = 0; offset < b.length; offset++) { 
			i = b[offset]; 
			if(i<0) i+= 256; 
			if(i<16) 
			buf.append("0"); 
			buf.append(Integer.toHexString(i)); 
		} 
			   output = buf.toString();
		} catch (NoSuchAlgorithmException e) { 
			 Log.e(TAG, "utilEncryptWithMD5_32 exception:"+e.getMessage());
		} 
	return output;
  }
  /**
   *  MD5
   * @param a_pInput input string
   * @return 16 length encrp string
   */
  public static String utilEncryptWithMD5_16(String a_pInput){
	  String output = null;
		try { 
			MessageDigest md = MessageDigest.getInstance("MD5"); 
			md.update(a_pInput.getBytes()); 
			byte b[] = md.digest(); 
			int i; 
			StringBuffer buf = new StringBuffer(""); 
			for (int offset = 0; offset < b.length; offset++) { 
			i = b[offset]; 
			if(i<0) i+= 256; 
			if(i<16) 
			buf.append("0"); 
			buf.append(Integer.toHexString(i)); 
		} 
			   output = buf.toString().substring(8,24);
		} catch (NoSuchAlgorithmException e) { 
			Log.e(TAG, "utilEncryptWithMD5_16 exception:"+e.getMessage());
		} 
	return output;
	  
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值