import java.security.Key;
import java.security.Security;
import javax.crypto.Cipher;
public class DESUtil {
private static String strDefaultKey = "ixAZ^%)2";
private static Cipher encryptCipher = null;
private static Cipher decryptCipher = null;
public static String byteArr2HexStr(byte[] arrB) throws Exception {
int iLen = arrB.length;
// 每个byte用两个字符才能表示,所以字符串的长度是数组长度的两倍
StringBuffer sb = new StringBuffer(iLen * 2);
for (int i = 0; i < iLen; i++) {
int intTmp = arrB[i];
// 把负数转换为正数
while (intTmp < 0) {
intTmp = intTmp + 256;
}
// 小于0F的数需要在前面补0
if (intTmp < 16) {
sb.append("0");
}
sb.append(Integer.toString(intTmp, 16));
}
return sb.toString();
}
public static byte[] hexStr2ByteArr(String strIn) throws Exception {
byte[] arrB = strIn.getBytes();
int iLen = arrB.length;
// 两个字符表示一个字节,所以字节数组长度是字符串长度除以2
byte[] arrOut = new byte[iLen / 2];
for (int i = 0; i < iLen; i = i + 2) {
String strTmp = new String(arrB, i, 2);
arrOut[i / 2] = (byte) Integer.parseInt(strTmp, 16);
}
return arrOut;
}
public DESUtil() throws Exception {
this(strDefaultKey);
}
/**
* 指定密钥构造方法
*
* @param strKey 指定的密钥
* @throws Exception
*/
public DESUtil(String strKey) throws Exception {
Security.addProvider(new com.sun.crypto.provider.SunJCE());
Key key = getKey(strKey.getBytes());
encryptCipher = Cipher.getInstance("DES");
encryptCipher.init(Cipher.ENCRYPT_MODE, key);
decryptCipher = Cipher.getInstance("DES");
decryptCipher.init(Cipher.DECRYPT_MODE, key);
}
/**
* 加密字节数组
*
* @param arrB 需加密的字节数组
* @return 加密后的字节数组
* @throws Exception
*/
public static byte[] encrypt(byte[] arrB) throws Exception {
return encryptCipher.doFinal(arrB);
}
/**
* 加密字符串
*
* @param strIn 需加密的字符串
* @return 加密后的字符串
* @throws Exception
*/
public static String encrypt(String strIn) throws Exception {
return byteArr2HexStr(encrypt(strIn.getBytes()));
}
/**
* 解密字节数组
*
* @param arrB 需解密的字节数组
* @return 解密后的字节数组
* @throws Exception
*/
public static byte[] decrypt(byte[] arrB) throws Exception {
return decryptCipher.doFinal(arrB);
}
public static String decrypt(String strIn) throws Exception {
return new String(decrypt(hexStr2ByteArr(strIn)));
}
private Key getKey(byte[] arrBTmp) throws Exception {
// 创建一个空的8位字节数组(默认值为0)
byte[] arrB = new byte[8];
// 将原始字节数组转换为8位
for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) {
arrB[i] = arrBTmp[i];
}
// 生成密钥
Key key = new javax.crypto.spec.SecretKeySpec(arrB, "DES");
return key;
}
public
static
void
main(String[] args) {
// TODO Auto-generated method stub
try
{
String test =
"Hellow Word!"
;
//DESPlus des = new DESPlus();//默认密钥
DESPlus des =
new
DESPlus(
"leemenz"
);
//自定义密钥
System.out.println(
"加密前的字符:"
+test);
System.out.println(
"加密后的字符:"
+des.encrypt(test));
System.out.println(
"解密后的字符:"
+des.decrypt(des.encrypt(test)));
}
catch
(Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
相关推荐
des加解密算法,可加解密文件,及内存 非常好用。
DES加密解密算法。通过密钥对对字符串进行加密解密操作,64位加密
DES加密 解密 方法: DESr DESw 支持3DES加密 解密 类中利用函数重载的方式 实现两种加密方式 加密后为16进制字符串 使用方法: 实例化一个对象 然后就可以随便用了。 如 DES加密 解密 CString sd,sd2; yxyDES2 ...
des加密解密算法,通过DES加密解密实现一个String字符串的加密和解密.
基于OPENSSL进行DES加密和解密的DLL文件,支持在windows上公共函数库给Python/C#/CPP等程序开发。本加密目标完成短文本(100个字符内),并没有测试过大文本,长字符串的情况。 分3组: 第一组:不需要解密方事先获悉...
根据DES加密标准,用C++设计编写符合DES算法思想的加、解密程序,实现对字符串和数组的加密和解密。
用 MFC 实现了 DES 加密解密,支持打开文件,保存文件
解密字符串 解密文件 128位MD5算法加密字符串 128位MD5算法加密Byte数组 32位MD5加密 Base64加密 Base64解密 DES加密/解密类。 加密 加密数据 解密 解密数据 得到随机安全码(哈希加密)。 得到随机哈希加密字符串...
一个C++标准实现的DES加密...后续:搜索网上的DES加密解密算法,很多是只能处理8位的数据,很少有关于直接加密解密字符串数据的。此库内的加密解密算法也是来自网络,我只是二次加工把它做成了一个动态库直接调用而已。
DES-加密解密语言算法的C语言实现文档带有完整的源代码,可加密字符串或者文件,已通过测试使用。
DES算法加密解密1M文件,并计算加密和解密时间
实现了Des字符串,加密解密,java版本的,java源代码
上次忘记发源代码了,补上。 java与delphi通用DES加解密(源代码)
Delphi写的使用Des算法对字符串进行加密解密函数,文件中包含例子。
利用des算法对字符串进行加密解密运算,简单的window下控制台程序。
des加密解密算法 ********************************************************************************* DES加密解密算法的动态链接库 使用说明: 1 使用Des_SetKey函数 来设置您的密钥 2 使用Des_Run...
此资源加密方式包括 MD2, MD5, SHA-1, HAVAL, Tiger, RIPE-MD160, MD5-MAC, HMAC, XOR-MAC, DES,IDEA, WAKE, 3-WAY, TEA, SAFER, Blowfish,SHARK, GOST, CAST-128, Square,Diamond2, Sapphire, RC2, RC5, RC6, MARS,...
DES加密算法基本功能Java实现源程序 确保“aa.txt”文件存在且在同一个目录中,否则将会报找不到加密文件的错误!
用VC里的MFC实现的S_DES加密解密算法的CBC模式,有图形界面,自己输入要加密的字符串和密钥,能进行加密、解密而且用皮肤对界面进行了美化。只要机器上装有VC,下载后可以直接使用,不需要进行任何设置。
JAVA_DES3加密算法,完整的JAVA DES3 包括获取key,字符串类型和byte型的算法加密和解密