`

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加密算法,可以确保在不同平台上的兼容性和一致性,尤其对于需要跨平台操作的应用场景,如将C语言代码移植到Android平台,通过JNI接口与Java代码交互,能够很好地解决加解密结果不一致的问题。...

    基于openssl的3DES加密算法

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

    3des加密算法C语言实现

    在C语言中实现3DES加密算法,需要理解以下几个核心概念: 1. **DES算法**:DES是一种64位块密码,使用56位的密钥进行加密。它通过一系列的替换和置换操作,如初始置换、轮函数和逆初始置换,将明文转换为密文。 2....

    Java 3des加密算法ECB模式

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

    3DES加密算法完全解析

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

    3DES加密算法 C++实现

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

    3DES加密js前端示例

    以下是对3DES加密算法及其在JavaScript前端应用的详细说明: ### 1. 3DES工作原理 3DES由3个独立的DES加密过程组成,分为两个阶段:加密和解密。在加密过程中,数据首先用一个密钥进行DES加密,然后用第二个密钥...

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

    ### 基于单片机的实时3DES加密算法实现 #### 1. 引言 随着信息技术的飞速发展,信息安全技术变得日益重要。单片机作为一种成熟且广泛应用的技术,在许多领域扮演着关键角色。然而,对于复杂的加密算法如3DES来说,...

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

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

    3DES加密算法C++实现

    总的来说,理解和实现3DES加密算法需要对位操作、循环和模式有深入的理解,同时需要关注加密过程中的安全性和效率。C++代码段可以作为一个学习和研究3DES的实用工具,帮助我们更好地理解加密算法的工作原理。

    3des加密算法源码

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

    3des加密的C语言算法

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

    3DES加密算法源代码.rar

    了解并掌握3DES加密算法对于理解和实现其他更复杂的加密技术,如AES(Advanced Encryption Standard),也是非常有帮助的。同时,它对于信息安全专业人员来说,是必备的知识点,因为理解加密算法的工作原理可以帮助...

    3des加密算法

    3DES(Triple DES)全称为三重数据加密标准,是一种基于DES(Data Encryption Standard)的加强版加密算法。DES在1970年代被广泛使用,但由于其密钥长度相对较短(56位),在面临现代计算能力的挑战下,安全性受到了...

    3DES加密算法源码

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

    3des加密算法(EDE)

    ### 3DES加密算法(EDE)知识点解析 #### 一、3DES算法概述 3DES(Triple Data Encryption Standard),即三重数据加密标准,是一种对称密钥算法,它是基于早期的DES(Data Encryption Standard)算法发展而来的。...

    3des加密算法cpp程序

    描述中提到的"3des加密算法cpp程序"可能存在的问题可能有以下几种情况: 1. **密钥管理不当**:3DES的密钥长度和管理非常重要,如果密钥过于简单或泄露,加密的安全性将大大降低。 2. **编码错误**:C++中处理字符...

    Java中3DES加密解密示例(封装byte数组16进制互转)

    在 Java 中,3DES 加密是一种常用的加密算法,它可以将明文数据转换为密文数据,以保护数据的安全性。在本示例中,我们将展示如何使用 3DES 算法在 Java 中实现加密和解密操作,并封装 byte 数组和 16 进制字符串...

Global site tag (gtag.js) - Google Analytics