import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
/**
* 一般加密解密工具<br>
* DESede/DES/BlowFish<br>
* DES的密钥(key)长度是为8个字节,加密解密的速度是最快的<br>
* DESede的密钥(key)长度是24个字节<br>
* BlowFish的密钥(key)是可变的 加密最快,强度最高,密钥长度范围(1<=key<=16)<br>
*
* @author songdawei
* @version 1.0
* @date 2008-10-20
*/
public class SecretCodeUtil {
public final static String DES = "DES";
public final static String DESEDE = "DESede";
public final static String BLOWFISH = "BlowFish";
public final static String MD5 = "MD5";
/**
* md5加密
*
* @param plainText
* @return
*/
public static String getMD5ofStr(String plainText) {
try {
return getMD5ofStr(string2Bytes(plainText));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static String getMD5ofStr(byte str[]) {
try {
MessageDigest md = MessageDigest.getInstance(MD5);
md.update(str);
byte b[] = md.digest();
return bytes2HexString(b);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 对数据源进行加密
*
* @param src
* 数据源
* @param key
* 密钥
* @param name
* 算法的名称
* @return 返回加密后的数据
* @throws Exception
*/
public static byte[] encrypt(byte[] src, byte[] key, String name)
throws Exception {
SecretKeySpec securekey = new SecretKeySpec(key, name);
// Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance(name);
// 用密匙初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, securekey);
// 现在,获取数据并加密
// 正式执行加密操作
return cipher.doFinal(src);
}
/**
* 对加密的数据源进行解密
*
* @param src
* 数据源
* @param key
* 密钥
* @param name
* 算法的名称
* @return 返回解密后的原始数据
* @throws Exception
*/
public static byte[] decrypt(byte[] src, byte[] key, String name)
throws Exception {
SecretKeySpec securekey = new SecretKeySpec(key, name);
// Cipher对象实际完成解密操作
Cipher cipher = Cipher.getInstance(name);
// 用密匙初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE, securekey);
// 现在,获取数据并解密
// 正式执行解密操作
return cipher.doFinal(src);
}
/**
* 二行制转字符串
*
* @param b
* @return
*/
public static String bytes2HexString(byte[] bytes) {
String hs = null;
if (bytes != null) {
final int size = bytes.length;
if (size > 0) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < size; i++) {
String tmp = (java.lang.Integer.toHexString(bytes[i] & 0XFF));
if (tmp.length() == 1) {
sb.append("0" + tmp);
} else {
sb.append(tmp);
}
}
hs = sb.toString().toUpperCase();
}
}
return hs;
}
public static byte[] hex2byte(byte[] b) {
if ((b.length % 2) != 0) {
return null;
}
byte[] b2 = new byte[b.length / 2];
for (int n = 0; n < b.length; n += 2) {
String item = new String(b, n, 2);
b2[n / 2] = (byte) Integer.parseInt(item, 16);
}
return b2;
}
/**
* 十六进位格式字符串转二进制流。
*
* @param hs String
* @return byte[]
*/
public static byte[] hexString2Bytes (String hs) {
byte[] bytes = null;
if (hs != null) {
final int size = (hs.length()) / 2;
if (size > 0) {
bytes = new byte[size];
for (int i = 0; i < size; i++) {
String hsByte = hs.substring(i * 2, i * 2 + 2);
byte b = 0;
try {
b = (byte) (Integer.parseInt(hsByte, 16));
} catch (java.lang.NumberFormatException e) {
b = 0;
}
bytes[i] = b;
}
}
}
return bytes;
}
/**
* 字符串解密
*
* @param data
* 字符串加密数据
* @param key
* 密钥
* @param name
* 算法名称
* @return
* @throws Exception
*/
public static String decrypt(String data, String key, String name) {
try {
return new String(decrypt(hex2byte(data.getBytes()),
string2Bytes(key), name));
} catch (Exception e) {
}
return null;
}
/**
* 字符串解密
*
* @param data
* 字符串加密数据
* @param key
* 密钥
* @param name
* 算法名称
* @return
* @throws Exception
*/
public static String decrypt(String data, byte[] key, String name) {
try {
return new String(decrypt(hex2byte(data.getBytes()),key, name));
} catch (Exception e) {
}
return null;
}
/**
* 把字符串转化成 Unicode Bytes.
*
* @param s String
* @return byte[]
*/
public static byte [] string2Bytes(String s) {
byte[] bytes = null;
if (s != null) {
try {
bytes = s.getBytes("utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return bytes;
}
/**
* 根据 Unicode Bytes 构造字符串.
*
* @param bytes byte[]
* @return String
*/
public static String bytes2String (byte[] bytes) {
String s = null;
if (bytes != null) {
try {
s = new String(bytes, "utf-8");
} catch (Exception e) {
e.printStackTrace();
}
}
return s;
}
/**
* 字符串加密
*
* @param data
* 字符串数据
* @param key
* 密钥
* @param name
* 算法名称
* @throws Exception
*/
public static String encrypt(String data, byte[] key, String name) {
try {
return bytes2HexString(encrypt(data.getBytes(), key, name));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 字符串加密
*
* @param data
* 字符串数据
* @param key
* 密钥
* @param name
* 算法名称
* @throws Exception
*/
public static String encrypt(String data, String key, String name) {
try {
return bytes2HexString(encrypt(data.getBytes(), string2Bytes(key), name));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
分享到:
相关推荐
java中常用的工具类,用于MD5的加密,里面还有切割了MD5加密的长度,有DES加密与解密,并且配有main函数可测试,可以根据自己的实际情况使用main函数测试使用
### 常用MD5加密算法和3-DES加密算法Java实现 在现代软件开发过程中,数据的安全性变得越来越重要。对于数据传输和存储过程中的安全性保障,加密技术发挥着至关重要的作用。本文将详细介绍如何在Java环境中实现两种...
总结起来,"MD5 3DES 双重加密 demo"是一个关于如何在Java环境中结合MD5和3DES进行数据加密的实例,它展示了如何利用这两种技术提高数据的安全性。通过学习和理解这个demo,开发者可以更好地理解和运用这些加密技术...
本篇文章将详细讲解如何在C#中实现与Java的3DES加密以及MD5withRSA签名的对接。 3DES(Triple Data Encryption Algorithm)是一种对称加密算法,它使用了DES(Data Encryption Standard)算法三次,增强了加密强度...
本DEMO提供了C#和JAVA两种编程语言下的DES加密和解密实现,这对于理解DES算法及其在实际开发中的应用非常有帮助。 1. **DES算法原理** - **结构**:DES算法基于Feistel网络,它将明文分为左右两半,通过一系列的...
Java实现的Base64、MD5、3DES三种工具 ...本文档提供了Java实现的Base64、MD5两种加密工具的示例代码,并对每种加密工具的实现进行了详细的解析。这些加密工具可以广泛应用于数据加密、身份验证和加密等领域。
本资源提供的"JAVA工具类"整合了XML处理、JSON操作、MD5加密以及加解密功能,对提高开发效率大有裨益。 1. **XML处理**: - DOM解析:DOM(Document Object Model)是一种将XML文档映射为树形结构的方法,通过它...
在Java中,可以使用`javax.crypto.Cipher`类来实现DES加密。 ```java import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; ...
### MD5、AES、DES 加密的 Java 实现 #### 一、MD5加密 **MD5**(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能将任意长度的数据转换成一个固定长度(通常是128位)的十六进制字符串。这种哈希值...
本文将详细介绍Java中常见的几种加密算法,包括AES加密、RSA加密、DES加密、MD5哈希加密、Base64编码以及异或(XOR)加密。理解并掌握这些算法对于开发安全的应用至关重要。 首先,AES(Advanced Encryption Standard...
首先,你需要在代码中引入`java.security.MessageDigest`包,这是实现MD5加密的基础。 ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; ``` #### 2. 创建MD5加密类 ...
一些常用的java工具类:Date和String类型互转,获取想要格式的String类型的日期时间、java导出数据到Excel、http文件下载、HMAC-MD5加密、3DES加密、MD5加密、读写txt文件、zip解压缩文件、文件夹等
虽然题目中提到了DES.cpp文件,但DES(Data Encryption Standard)是一种加密算法,与MD5(一种哈希函数)不同,这里并未提供具体的DES实现细节。如果你需要了解更多关于DES的信息,它是一种对称加密算法,通常用于...
在Java中,可以通过`Cipher`类和`DESKeySpec`类来实现DES加密和解密。首先,需要创建一个`DESKeySpec`对象,然后使用`KeyFactory`生成`SecretKey`,最后通过`Cipher`对象的`init`方法初始化加密或解密模式,并调用`...
`DESCipher.java`和`DESCipherProtocal.java`可能实现了DES加密和解密的函数,使用`javax.crypto.Cipher`类进行操作。DES通常适用于小量数据加密,因为其密钥长度相对较短(64位)。 4. **RSA加密解密**:RSA是一种...
总共两个用户 A和B, A负责加密,B解密。用Java编写界面。 首先A用DES对选定文件加密,用hash函数对明文提取hash值,RSA对hash值加密, 然后B对加密的文件解密,对A的s值解密,比较两个值
用java写的暴力破解,专门破解AES,DES,SHA,MD5. 你们可以自己再次的去完善一下,这里纯属简单版本。 用java写的暴力破解,专门破解AES,DES,SHA,MD5. 你们可以自己再次的去完善一下,这里纯属简单版本。 用java写的...
本文将详细介绍四种常见的加密算法:DES、3DES、MD5和RSA,这些算法在Java编程语言中得到了广泛应用。 首先,我们来了解DES(Data Encryption Standard),这是一种对称加密算法,由IBM在1970年代开发并被美国国家...
使用仿MD5格式的DES加密算法对明文进行加密,生成密文。 实现DES解密算法:在decrypt()方法中,同样使用javax.crypto库中的Cipher类和相关方法实现了DES解密算法。使用仿MD5格式的DES解密算法对密文进行解密,还原为...
java-des加密解密程序,基于java编写的des,3des加密程序,包括MAC校验,MD5校验等