`

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));

 }

}

分享到:
评论

相关推荐

    3DES加密算法C语言实现

    利用C语言编写的3DES加密算法,能够对任意长度的字符数组进行加解密。通过编写相应的JNI接口文件能够很容易移植到Android平台,从而解决不同平台DES加解密结果不一致的问题。

    基于openssl的3DES加密算法

    3DES加密算法,使用openssl库,ECB算法,pkcs7padding填充模式(借鉴网上的算法,并经过自己的改良,可以实现加密与解密)

    Java 3des加密算法ECB模式

    Java 3des加密算法ECB模式,亲测完美通过。目前网上的大部分算法都通不过或者加进Base64之类的,还要不下载其它jar包。而代码使用时直接下载运行,无须配置和下载额外的jar包 ,只需换上自己的密钥和待加密的数据...

    3des加密算法

    3des加密算法

    3DES加密算法完全解析

    3des加密算法及主要与那里解析,内附源码及十六进制算法解析!

    3des加密算法C语言实现

    3DES加密算法的C语言实现代码,很好很实用.亲测可用.

    3DES加密算法 C++实现

    3DES(即Triple DES)是DES向AES过渡的加密算法,它使用3条64位的密钥对数据进行三次加密。是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加密算法。比起最初的DES,3DES更为安全。

    Android下3DES加密算法的JNI实现(完善版)

    之前上传过:编译Android下3DES加密算法的.SO文件及源码,地址:...压缩文件内包含编译后的lib3DES.so文件,3DES加密算法的JNI C语言源码,Android的makefile文件等。希望能够帮助到有需要的朋友!

    3des加密算法源码

    3des加密算法源码,里面包含3des加密算法 和 解密算法。

    3des加密的C语言算法

    3des加密算法的C语言实现,很好很实用

    3DES加密算法源码

    它相当于是对每个数据块应用三次DES加密算法。 最早的定义了该算法的标准(ANS X9.52,1998年发布)将其描述为“三重数据加密算法(TDEA)”— 即为ANSI X3.92中定义的数据加密算法(DEA)的三次重复操作— 而完全...

    DES加密算法(c语言实现)

    DES,DES加密算法,DES算法源码。用C写的DES加密算法。 DES,DES加密算法,DES算法源码。 DES加密算法(c语言实现) (本程序可以直接使用)

    3DES加密算法源代码.rar

    3DES加密算法源代码.rar

    3DES加密算法的设计.pdf

    3DES加密算法的设计,中国科技论文在线,详细介绍3DES的原理及实现过程

    JAVA中3des加密算法.pdf

    JAVA中3des加密算法.pdf 学习资料 复习资料 教学资源

    基于单片机的实时3DES 加密算法的实现

    先简要介绍了3DES 加密算法, 接着给出了用单片机来实时实现该算 法时为了提高运算速度而采用的两种方法, 并给出了实际测试结果。

    des加密算法 C语言源码

    des加密算法 C语言源码 基于对称密码学的加密算法 网络安全加密

    3DES加密算法(源码)

    (C++)此代码在Windows Mobile平台下VS2005调试通过、并且另有一个用VC 6.0写的一个3DES加密程序,内附有3DES加密算法文档,希望对各位有一点帮助(如果有帮助请帮忙顶下)

Global site tag (gtag.js) - Google Analytics