package com.snailteam.adserver.until;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
/**
* @author :xiaofancn
* @version :2011-11-11 上午11:02:22
*
*/
public class Tool3DES {
private static final String Algorithm = "DESede"; // 定义 加密算法,可用
private static final int Keysize = 168;
/**
* 将byte[]转化成16进制字符串
* @param buf
* @return
*/
public static String parseByte2HexStr(byte buf[]) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < buf.length; i++) {
String hex = Integer.toHexString(buf[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
sb.append(hex.toUpperCase());
}
return sb.toString();
}
/**
* 将16进制字符串转化成byte[]
* @param buf
* @return
*/
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;
}
/**
* 加密
* message->密文byte[]->16进制密文字符串
* @param password
* @param message
* @return
*/
public static String encrypt(String password, String message) {
try {
KeyGenerator kgen = KeyGenerator.getInstance(Algorithm);
kgen.init(Keysize, new SecureRandom(password.getBytes()));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, Algorithm);
Cipher cipher = Cipher.getInstance(Algorithm);// 创建密码器
byte[] byteContent = message.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
byte[] result = cipher.doFinal(byteContent);
return parseByte2HexStr(result);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}
/**
* 解密
* 16进制密文字符串->byte[]->解密
* @param password
* @param message
* @return
*/
public static String decrypt(String password, String message) {
KeyGenerator kgen;
try {
kgen = KeyGenerator.getInstance(Algorithm);
kgen.init(Keysize, new SecureRandom(password.getBytes()));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, Algorithm);
Cipher cipher = Cipher.getInstance(Algorithm);// 创建密码器
byte[] byteContent = parseHexStr2Byte(message);
cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
byte[] result = cipher.doFinal(byteContent);
return new String(result);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
String content = "你好";
String password = "123456789";
System.out.println("加密前:"+content);
String temp = encrypt(password, content);
System.out.println("加密后:"+temp);
temp = decrypt(password, temp);
System.out.println("解密后:"+temp);
}
}
分享到:
相关推荐
以下是关于3DES加密解密算法在Java中的实现细节: 首先,为了使用3DES,Java程序需要引入特定的JAR包,这些包通常位于`JAVA_HOME/jre/lib/`目录下,包括`jce.jar`、`US_export_policy.jar`、`local_policy.jar`以及...
本篇文章将深入探讨C#中实现3DES加密解密的方法。 3DES的工作原理是通过三次应用DES算法来提高安全性。它将明文分成64位的数据块,然后用三个不同的密钥进行三次独立的DES加密过程:一次加密、一次解密、再一次加密...
标题"cryptopp的DES加密解密"指出我们将讨论的是使用Cryptopp库进行DES(Data Encryption Standard)加密与解密的方法。Cryptopp是一个强大的、免费的C++类库,提供了多种密码学算法,包括DES,用于数据的安全传输和...
des加密解密及md5加密.例子及应用!!!
在这个"VC下DES加密解密程序"中,我们将会探讨如何在Visual C++环境下实现DES算法。 首先,DES加密算法基于64位的数据块进行操作,但实际有效的密钥长度只有56位,因为有8位用于奇偶校验和设计上的特殊用途。DES...
java版Des加密解密源码 DES加密解密程序的主程序在 FileDES类中 运行时使用的例子是本目录下的111.doc文件,运行后自动生成222.doc文件和333.doc文件。 其中111.doc文件加密后的文件是222.doc文件,222.doc文件...
总的来说,通过Java实现3DES加密解密,我们需要理解加密算法的基本原理,熟悉Java的相关加密库,并掌握如何生成和使用密钥。在实际开发中,确保数据的安全性至关重要,因此正确地使用加密技术是每个IT专业人员必备的...
标题中的“Delphi7与C#实现Des加解密互通Demo”指的是一个示例项目,该项目旨在演示如何在Delphi 7和C#之间进行DES加密和解密操作,确保两个环境下的数据一致性。全网找遍只此一份,表明这个示例可能比较罕见且具有...
在Java中实现3DES加密解密,需要使用`javax.crypto`包中的`Cipher`类。以下是一个简单的3DES加密解密Java示例: ```java import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto....
des加密解密的C++实现,该资源提供了完整的例子,调用方便,开发产品时直接参考试用即可
6. **执行D3DES**:首先用第一个密钥执行DES加密,然后用第二个密钥执行DES解密,最后再用第一个密钥进行一次DES加密。这个过程就是D3DES的核心。 7. **密文后处理**:加密完成后,对密文进行逆初始置换,得到最终...
根据提供的文件信息,我们可以从中提炼出两个主要的知识点:一是关于DES加密解密技术的应用;二是关于WPF中实现转圈圈动画的方法。下面将分别对这两个知识点进行详细阐述。 ### DES加密解密 #### 1. DES简介 数据...
- C#提供了一套完整的加密API,位于`System.Security.Cryptography`命名空间下,包括DES类,用于实现DES加密和解密。 3. **创建DES对象**: - 使用`new DESCryptoServiceProvider()`来创建一个DES加密服务提供者...
下面将详细介绍DES加密解密的基本原理、JS实现以及使用时需要注意的事项。 一、DES算法简介 DES算法由IBM公司于1970年代提出,最初是为美国政府设计的标准加密算法。它基于Feistel网络结构,通过16轮迭代过程,将64...
以下是一个DES加密和解密的例子: ```csharp using System; using System.IO; using System.Text; using System.Security.Cryptography; public class DESExample { public static void EncryptFile(string input...
本Java实现的DES加密解密源码提供了一个可运行的例子,这对于理解和学习DES的工作原理非常有帮助。源码中的注释清晰,使得开发者能够快速了解每一步操作的含义。 DES加密过程主要包括以下几个步骤: 1. **Key ...
在JavaScript环境中实现DES或3DES加密解密,可以使用现有的库,如`crypto-js`。这个压缩包中的"DES3.js"文件很可能就是使用了`crypto-js`库或者其他类似的JavaScript库,实现了DES和3DES的加密解密功能。JavaScript...
1. `wudes.c`:这是主要的3DES加密解密功能实现的源代码。其中可能包含了3DES的算法实现,以及与之相关的函数,如设置密钥、加密和解密的接口。 2. `wudesutils.c`:这个文件可能包含了辅助功能,如字节操作、内存...
在C#中实现DES加密解密,你需要使用`System.Security.Cryptography`命名空间中的`DESCryptoServiceProvider`类。以下是一个简单的示例: ```csharp using System; using System.IO; using System.Security....
本实例将探讨如何使用JavaScript实现DES加密解密功能。 首先,我们需要理解DES的基本原理。DES是一种分组密码,它将明文数据分成64位的数据块,然后用64位的密钥对每个数据块进行加密。实际的DES算法中,有56位是...