您的位置:首页 > 编程语言 > Java开发

java的DES加密、解密和MD5加密

2013-06-14 16:21 495 查看
今天需要做一个数据的加密和解密,在查看了相关的资料和代码后,初次写出了一个实例:

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;

import com.sun.org.apache.xml.internal.security.utils.Base64;

/**
* 加密解密 工具
*
* @author luosheng
*/
public class SecretUtil {
/**
* 密匙
*/
private static final String ENCYPTION_KEY = "123dddd55555";
/**
* 进行MD5加密
*
* @param info
*            要加密的信息
* @return String 加密后的字符串
*/
public static String encryptToMD5(String info) {
byte[] digesta = null;
try {
// 得到一个md5的消息摘要
MessageDigest alga = MessageDigest.getInstance("MD5");
// 添加要进行计算摘要的信息
alga.update(info.getBytes());
// 得到该摘要
digesta = alga.digest();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
// 将摘要转为字符串
String rs = null;
try {
rs = URLEncoder.encode(Base64.encode(digesta), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return rs;
}
/**
* 创建密匙
*
* @param algorithm
*            加密算法,可用 DES,DESede,Blowfish
* @return SecretKey 秘密(对称)密钥
*/
private static SecretKey createSecretKey(String algorithm) {
// 声明KeyGenerator对象
KeyGenerator keygen;
// 声明 密钥对象
SecretKey deskey = null;
try {
// 返回生成指定算法的秘密密钥的 KeyGenerator 对象
keygen = KeyGenerator.getInstance(algorithm);
keygen.init(new SecureRandom(ENCYPTION_KEY.getBytes()));
// 生成一个密钥
deskey = keygen.generateKey();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
// 返回密匙
return deskey;
}
/**
* 进行DES加密
*
* @param key
*            密匙
* @param info
*            要加密的信息
* @return String 加密后的信息
*/
public static String encryptToDES(String info) {
// 定义 加密算法,可用 DES,DESede,Blowfish
String Algorithm = "DES";
// 定义要生成的密文
byte[] cipherByte = null;
String cipherString = null;
try {
// 得到加密/解密器
Cipher c1 = Cipher.getInstance(Algorithm);
// 用指定的密钥和模式初始化Cipher对象
c1.init(Cipher.ENCRYPT_MODE, createSecretKey("DES"));
// 对要加密的内容进行编码处理,
cipherByte = c1.doFinal(info.getBytes("UTF-8"));
cipherString = new String(URLEncoder.encode(Base64.encode(cipherByte),"UTF-8"));
} catch (Exception e) {
e.printStackTrace();
}
// 返回密文
return cipherString;
}
/**
* 根据密匙进行DES解密
*
* @param key
*            密匙
* @param sInfo
*            要解密的密文
* @return String 返回解密后信息
*/
public static String decryptByDES(String sInfo) {
// 定义 加密算法,
String Algorithm = "DES";
byte[] cipherByte = null;
try {
// 得到加密/解密器
Cipher c1 = Cipher.getInstance(Algorithm);
// 用指定的密钥和模式初始化Cipher对象
c1.init(Cipher.DECRYPT_MODE, createSecretKey("DES"));
// 对要解密的内容进行编码处理
cipherByte = c1.doFinal(Base64.decode(URLDecoder.decode(sInfo,"UTF-8")));
} catch (Exception e) {
e.printStackTrace();
}
String res = null;
try {
res =  new String(cipherByte,"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return res;
}

/**
* 测试
*
* @param args
*/
public static void main(String[] args) {
// 执行MD5加密
System.out.println("经过MD5:" + SecretUtil.encryptToMD5("asdfgh"));
// 用密匙加密信息
String str1 = SecretUtil.encryptToDES("sdfghjd");
System.out.println("使用des加密信息:" + str1);
// 使用密匙解密
String str2 = SecretUtil.decryptByDES(str1);
System.out.println("解密后为:" + str2);

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: