本文介绍HMAC为何物及其简单应用
以下为其他文章中截取内容,用以帮助了解何为HMAC,以及MAC。
MAC算法结合了MD5和SHA算法的优势,并加入密钥的支持,是一种更为安全的消息摘要算法。
MAC(Message Authentication Code,消息认证码算法)是含有密钥的散列函数算法,兼容了MD和SHA算法的特性,并在此基础上加入了密钥。我们也常把MAC称为HMAC(keyed-Hash Message Authentication Code)
1,算法
那么要如何实现这个看起来很高大上的HMAC算法呢
以下是MD5的密匙算法:
public static byte[] initHmacMD5Key() throws NoSuchAlgorithmException {
// 初始化HmacMD5摘要算法的密钥产生器
KeyGenerator generator = KeyGenerator.getInstance("HmacMD5");
// 产生密钥
SecretKey secretKey = generator.generateKey();
// 获得密钥
byte[] key = secretKey.getEncoded();
return key;
}
public static String encodeHmacMD5(byte[] data, byte[] key) throws Exception {
// 还原密钥
SecretKey secretKey = new SecretKeySpec(key, "HmacMD5");
// 实例化Mac
Mac mac = Mac.getInstance(secretKey.getAlgorithm());
//初始化mac
mac.init(secretKey);
//执行消息摘要
byte[] digest = mac.doFinal(data);
return new HexBinaryAdapter().marshal(digest);//转为十六进制的字符串
}
这就结束了吗?不,你还需要执行消息摘要
public static void main(String[] args) throws Exception {
//注意!下面这个testString在实际应用中才是密匙,而变量keyHmacMD5是一个随机数
String testString = "asdasd";
byte[] keyHmacMD5=MACCoder.initHmacMD5Key();
System.out.println(MACCoder.encodeHmacMD5(testString.getBytes(),keyHmacMD5));
}
这就结束了,快吧!
2,应用
那么上述是用java实现这算法,实现被封装了,我们可以看,也可以不去管它。那么接下来HMAC算法是如何应用的呢?
认证流程
安全性浅析