具体代码如下:
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(Message-Digest Algorithm 5)、SHA(Secure Hash Algorithm)系列以及HMAC(Hash-based Message Authentication Code)。 **BASE64编码** 虽然BASE64不是真正的加密算法,...
Java中的单向加密技术主要包括MD5、SHA以及HMAC,这些算法主要用于数据的完整性校验和安全性保护。下面我们将详细探讨这些加密算法及其在Java中的实现。 首先,MD5(Message-Digest Algorithm 5)是一种广泛应用的...
在Eclipse IDE中关联JDK源码可以帮助开发者更深入地理解MD5和SHA单向加密算法在Java中的实现。具体来说,可以解压JDK的src.zip目录到指定位置,并下载OpenJDK的源代码来补充那些不在src.zip中的类文件,例如sun....
Java加密技术(一) 关键字: java 加密基础, base64, md5, mac, sha, 单向加密 。。。。。。。。。。。。。。
首先,我们来看基础的单向加密算法,如BASE64、MD5、SHA和HMAC。 **BASE64** 是一种编码方式,而非真正的加密算法。它将任意8位字节序列转化为一种不易被人直接识别的形式,常用于电子邮件和HTTP请求中的数据编码。...
Java提供了丰富的类库来支持各种加密算法,包括单向加密(哈希函数)和双向加密(对称与非对称加密)。本篇文章将主要介绍几种常见的加密方法:BASE64、MD5、SHA和HMAC。 1. **BASE64**:BASE64是一种编码方式,而...
Java加密技术涵盖了一系列用于保护数据安全的算法,包括单向加密和双向加密。单向加密,也称为哈希函数,不支持解密过程,主要用于数据校验和完整性验证。Java中常见的单向加密算法有: 1. **BASE64**:并非真正的...
目前,Java开发工具包(JDK)1.5及以上版本对MD4、MD5、SHA-1等算法提供了支持。通过`java.security.MessageDigest`类,开发者可以轻松地实现消息摘要功能。 ##### 2.2 国内加密技术现状 对于中国而言,虽然可以从...
- 消息摘要:通过单向散列函数(如MD4、MD5、SHA-1)计算出消息的固定长度摘要,用于验证消息的完整性。在Java中,可以使用`java.security.MessageDigest`类来实现消息摘要的生成。例如,下面的代码展示了如何使用...
5. **Java Cryptography Extension (JCE)**:Java平台的标准扩展,提供了加密、解密、消息认证码(MAC)和密钥协议等功能。JCE包含各种加密算法的实现,如AES、RSA等,并支持无限强度加密策略。 6. **Key和Cipher...
#### 一、BASE64与单向加密算法MD5&SHA&MAC ##### BASE64 BASE64是一种编码格式,并非真正的加密算法。它主要用于将二进制数据转换成文本格式的数据,以便在网络上传输。由于某些传输协议只支持ASCII字符集,因此...
在这个工具中,有13种不同的哈希算法,可能包括MD5、SHA-1、SHA-256、SHA-384、SHA-512等。这些哈希函数广泛应用于数据完整性校验、密码存储等领域,因为它们具有单向性和抗碰撞性。 2. **消息认证码(MAC)**:MAC...
首先,基础的单向加密算法主要用于生成信息摘要,它们是非可逆的,即无法通过摘要还原原始数据。其中包括: 1. **BASE64**:实际上是一种编码方式,而非加密算法。它将任意8位字节序列转换成可读性较好的字符序列,...