具体代码如下:
import java.security.MessageDigest;
import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/** *//**
* 加密(主要有:MD4,SHA,MAC)
*
* @author kinkding
* @history 2009-6-3
*/
public class MyEncrypt {
/** *//** MD5 加密 */
public static byte[] encryptMD5(byte[] data) throws Exception {
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(data);
return md5.digest();
}
/** *//** SHA 加密 */
public static byte[] encryptSHA(byte[] data) throws Exception {
MessageDigest sha = MessageDigest.getInstance("SHA");
sha.update(data);
return sha.digest();
}
/** *//** 取得HMAC密钥 */
public static String getMacKey() throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");
SecretKey secretKey = keyGenerator.generateKey();
return new BASE64Encoder().encode(secretKey.getEncoded());
}
/** *//** 执行加密 */
public static byte[] encryptHMAC(byte[] data, String key) throws Exception {
byte[] bkey = new BASE64Decoder().decodeBuffer(key);
SecretKey secretKey = new SecretKeySpec(bkey, "HmacMD5");
Mac mac = Mac.getInstance(secretKey.getAlgorithm());
mac.init(secretKey);
return mac.doFinal(data);
}
private static String toHex(byte[] buffer) {
StringBuffer sb = new StringBuffer(buffer.length * 3);
for (int i = 0; i < buffer.length; i++) {
sb.append(Character.forDigit((buffer[i] & 0xf0) >> 4, 16));
sb.append(Character.forDigit(buffer[i] & 0x0f, 16));
}
return sb.toString();
}
public static void main(String[] args) {
String msg = "生活真好^_^";
byte[] data = msg.getBytes();
try {
System.out.println("msg:" + msg);
System.out.println("md5:" + toHex(encryptMD5(data)));
System.out.println("sha:" + toHex(encryptSHA(data)));
String key = getMacKey();
System.out.println("mac key:" + key);
System.out.println("mac:" + toHex(encryptHMAC(data, key)));
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行效果如下:
msg:生活真好^_^
md5:e0649dfaef57789734e920c7ecb9c4ea
sha:a4bd855836de26b2323778b797629fed4416f12f
mac key:zBPe28oho2H84+Mg8mF4abpd0MQvdjgqgFdX4hmUQQbOGnX1aFq/oQnogsHVIczgx1AZ1s2/ncPz
tBQIGLZUnw==
mac:87f4140161ad43797059e85dd9962897
分享到:
相关推荐
纯JAVA的MD5加密,利用MD5单向函数产生密钥,方便测试
主要介绍了Java 详解单向加密--MD5、SHA和HMAC及简单实现实例的相关资料,需要的朋友可以参考下
Java学习资料,心得,其中包括单向加密算法、jsp实现分页的步骤、Hibernate、Spring和Struts工作原理及使用理由.txt
本篇文章主要介绍了Java实现常用加密算法——单向加密算法MD5和SHA,信息加密后数据更安全,需要的朋友可以参考下。
Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC Java加密技术(二)——对称加密算法DES&AES Java加密技术(三)——PBE算法 Java加密技术(四)——非对称加密算法RSA Java加密技术(五)——非对称加密...
MD5单向加密,加密后无法解密。。。。。。。。。。
VB编写的MD5单向加密组件源码,仅供参考。
Java加密技术(一) 关键字: java 加密基础, base64, md5, mac, sha, 单向加密 。。。。。。。。。。。。。。
ava.security.MessageDigest类用于为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。简单点说就是用于生成散列码。信息摘要是安全的单向哈希函数,它接收任意大小的数据,输出固定长度的哈希值。关于信息摘要...
MD5就是采用单向加密的加密算法,对于MD5而言,有两个特性是很重要的,第一是任意两段明文数据,加密以后的密文不能是相同的;第二是任意一段明文数据,经过加密以后,其结果必须永远是不变的。前者的意思是不可能有...
java加密技术 与单向加密算法MD5&SHA;&MAC; 对称加密算法DES&AES; PBE 算法
SHA (安全Hash算法)是一种单向散列算法,可用于数字加密或数字签名,是比MD5更加安全的单向散列算法,与MD5算法一起时被应用最广泛的两种算法。
MD5加密单向加密算法加密速度快,不需要秘钥,最好加盐
MD5 C#
所谓MD5,即“Message-Digest Algorithm 5(信息-摘要算法)”,它由MD2、MD3、MD4发展而来的一种单向函数算法(也就是HASH算法),它是国际著名的公钥加密算法标准RSA的第一设 计者R.Rivest于上个世纪90年代初开发...
md5单向散列加密算法,此压缩包,包含完整调用DLL源码,PB格式.导入后直接可以应用.
128位MD5算法加密字符串 128位MD5算法加密Byte数组 32位MD5加密 Base64加密 Base64解密 DES加密/解密类。 加密 加密数据 解密 解密数据 得到随机安全码(哈希加密)。 得到随机哈希加密字符串 哈希加密一个字符串 ...
● MD5(Message Digest algorithm 5,信息摘要算法) ● SHA(Secure Hash Algorithm,安全散列算法) ● HMAC(Hash Message Authentication Code,散列消息鉴别码) 复杂的对称加密(DES、PBE)、非对称加密算法: ...
说明tomcat如何配置https单向加密,如何使用jdk提供的keytool建立服务器证书
这是一个单向链表,它具有插入与删除节点的功能。Entry类实现了链表的各节点。