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));
}
}
分享到:
相关推荐
在C语言中实现3DES加密算法,可以确保在不同平台上的兼容性和一致性,尤其对于需要跨平台操作的应用场景,如将C语言代码移植到Android平台,通过JNI接口与Java代码交互,能够很好地解决加解密结果不一致的问题。...
3DES加密算法,使用openssl库,ECB算法,pkcs7padding填充模式(借鉴网上的算法,并经过自己的改良,可以实现加密与解密)
在C语言中实现3DES加密算法,需要理解以下几个核心概念: 1. **DES算法**:DES是一种64位块密码,使用56位的密钥进行加密。它通过一系列的替换和置换操作,如初始置换、轮函数和逆初始置换,将明文转换为密文。 2....
Java 3des加密算法ECB模式,亲测完美通过。目前网上的大部分算法都通不过或者加进Base64之类的,还要不下载其它jar包。而代码使用时直接下载运行,无须配置和下载额外的jar包 ,只需换上自己的密钥和待加密的数据...
3des加密算法及主要与那里解析,内附源码及十六进制算法解析!
3DES(即Triple DES)是DES向AES过渡的加密算法,它使用3条64位的密钥对数据进行三次加密。是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加密算法。比起最初的DES,3DES更为安全。
以下是对3DES加密算法及其在JavaScript前端应用的详细说明: ### 1. 3DES工作原理 3DES由3个独立的DES加密过程组成,分为两个阶段:加密和解密。在加密过程中,数据首先用一个密钥进行DES加密,然后用第二个密钥...
### 基于单片机的实时3DES加密算法实现 #### 1. 引言 随着信息技术的飞速发展,信息安全技术变得日益重要。单片机作为一种成熟且广泛应用的技术,在许多领域扮演着关键角色。然而,对于复杂的加密算法如3DES来说,...
之前上传过:编译Android下3DES加密算法的.SO文件及源码,地址:...压缩文件内包含编译后的lib3DES.so文件,3DES加密算法的JNI C语言源码,Android的makefile文件等。希望能够帮助到有需要的朋友!
总的来说,理解和实现3DES加密算法需要对位操作、循环和模式有深入的理解,同时需要关注加密过程中的安全性和效率。C++代码段可以作为一个学习和研究3DES的实用工具,帮助我们更好地理解加密算法的工作原理。
3des加密算法源码,里面包含3des加密算法 和 解密算法。
3des加密算法的C语言实现,很好很实用
了解并掌握3DES加密算法对于理解和实现其他更复杂的加密技术,如AES(Advanced Encryption Standard),也是非常有帮助的。同时,它对于信息安全专业人员来说,是必备的知识点,因为理解加密算法的工作原理可以帮助...
3DES(Triple DES)全称为三重数据加密标准,是一种基于DES(Data Encryption Standard)的加强版加密算法。DES在1970年代被广泛使用,但由于其密钥长度相对较短(56位),在面临现代计算能力的挑战下,安全性受到了...
它相当于是对每个数据块应用三次DES加密算法。 最早的定义了该算法的标准(ANS X9.52,1998年发布)将其描述为“三重数据加密算法(TDEA)”— 即为ANSI X3.92中定义的数据加密算法(DEA)的三次重复操作— 而完全...
### 3DES加密算法(EDE)知识点解析 #### 一、3DES算法概述 3DES(Triple Data Encryption Standard),即三重数据加密标准,是一种对称密钥算法,它是基于早期的DES(Data Encryption Standard)算法发展而来的。...
描述中提到的"3des加密算法cpp程序"可能存在的问题可能有以下几种情况: 1. **密钥管理不当**:3DES的密钥长度和管理非常重要,如果密钥过于简单或泄露,加密的安全性将大大降低。 2. **编码错误**:C++中处理字符...
在 Java 中,3DES 加密是一种常用的加密算法,它可以将明文数据转换为密文数据,以保护数据的安全性。在本示例中,我们将展示如何使用 3DES 算法在 Java 中实现加密和解密操作,并封装 byte 数组和 16 进制字符串...