3DES加密算法

package metrs.commons;

import java.io.UnsupportedEncodingException;
import java.security.*;

import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;

/**
 * 字符串 DESede(3DES) 加密
 *
 * @author wanggang
 * @version 2010-12-31
 */
public class ThreeDes
{
 private static final String Algorithm = "DESede"; // 定义 加密算法,可用
              // DES,DESede,Blowfish

 // keybyte为加密密钥,长度为24字节
 // src为被加密的数据缓冲区(源)
 public static byte[] encryptMode(byte[] keybyte, byte[] src)
 {
  try
  {
   // 生成密钥
   SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);
   // 加密
   Cipher c1 = Cipher.getInstance(Algorithm);
   c1.init(Cipher.ENCRYPT_MODE, deskey);
   return c1.doFinal(src);
  }
  catch (java.security.NoSuchAlgorithmException e1)
  {
   e1.printStackTrace();
  }
  catch (javax.crypto.NoSuchPaddingException e2)
  {
   e2.printStackTrace();
  }
  catch (java.lang.Exception e3)
  {
   e3.printStackTrace();
  }
  return null;
 }

 // keybyte为加密密钥,长度为24字节
 // src为加密后的缓冲区
 public static byte[] decryptMode(byte[] keybyte, byte[] src)
 {
  try
  {
   // 生成密钥
   SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);
   // 解密
   Cipher c1 = Cipher.getInstance(Algorithm);
   c1.init(Cipher.DECRYPT_MODE, deskey);
   return c1.doFinal(src);
  }
  catch (java.security.NoSuchAlgorithmException e1)
  {
   e1.printStackTrace();
  }
  catch (javax.crypto.NoSuchPaddingException e2)
  {
   e2.printStackTrace();
  }
  catch (java.lang.Exception e3)
  {
   e3.printStackTrace();
  }
  return null;
 }

 /** 转换成十六进制字符串 */
 /*
  * public static String byte2hex(byte[] b) { String hs = ""; String stmp = ""; for (int n = 0; n < b.length; n++) { stmp = (java.lang.Integer.toHexString(b[n] & 0XFF)); if (stmp.length() == 1) hs = hs + "0" + stmp; else hs = hs + stmp; if (n < b.length - 1) hs = hs + ":"; } return hs.toUpperCase(); }
  */

 /**
  * 二行制转字符串
  *
  * @param b
  * @return
  */
 public static String byte2hex(byte[] b)
 { // 一个字节的数,
  // 转成16进制字符串
  String hs = "";
  String stmp = "";
  for (int n = 0; n < b.length; n++)
  {
   // 整数转成十六进制表示
   stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
   if (stmp.length() == 1)
    hs = hs + "0" + stmp;
   else
    hs = hs + stmp;
  }
  return hs.toUpperCase(); // 转成大写
 }

 /**
  * 将指定字符串src,以每两个字符分割转换为16进制形式 如:"2B44EFD9" --> byte[]{0x2B, 0x44, 0xEF, 0xD9}
  *
  * @param src String
  * @return byte[]
  */

 public static byte[] parseHexStr2Byte(String hexStr)
 {
  if (hexStr.length() < 1)
   return null;
  byte[] result = new byte[hexStr.length() / 2];
  for (int i = 0; i < hexStr.length() / 2; i++)
  {
   int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
   int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);
   result[i] = (byte) (high * 16 + low);
  }
  return result;
 }

 public static void main(String[] args) throws UnsupportedEncodingException
 {

  // 添加新安全算法,如果用JCE就要把它添加进去
  Security.addProvider(new com.sun.crypto.provider.SunJCE());

  System.out.println((byte) 0x88);
  String key = "
cs.bcactc.com_!@#$%^&*()";
  byte[] keyBytes = key.getBytes();
  String szSrc = "user_no=wangzhanceshi&user_name=网站测试&user_type=1&org_info_id=100&org_info_name=安国市第一建筑安装工程公司&org_info_code=623549866&url_type=baoming&project_id=1222";
  System.out.println("加密前的字符串:" + szSrc);

  byte[] encoded = encryptMode(keyBytes, szSrc.getBytes());

  System.out.println("加密后的字符串:" + byte2hex(encoded));

  byte[] decode = decryptMode(keyBytes, parseHexStr2Byte(byte2hex(encoded)));
  System.out.println("解密后的字符串:" + new String(decode));

 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值