日记 - HMAC应用

阅读更多

本文介绍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算法是如何应用的呢?

HMAC的一个典型应用是用在“挑战/响应”(Challenge/Response)身份认证中。

认证流程

(1) 先由 客户端向服务器发出一个验证请求。
(2) 服务器接到此请求后生成一个随机数并通过 网络传输给 客户端(此为挑战)。
(3)  客户端将收到的随机数与存储好的 密钥进行HMAC-MD5运算并得到一个结果作为认证证据传给服务器(此为响应)。
(4) 与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户 密钥进行HMAC-MD5运算,如果服务器的运算结果与 客户端传回的响应结果相同,则认为客户端是一个合法用户

安全性浅析

由上面的介绍,我们可以看出,HMAC算法更象是一种加密算法,它引入了 密钥,其安全性已经不完全依赖于所使用的HASH算法,安全性主要有以下几点保证:
(1) 使用的 密钥是双方事先约定的,第三方不可能知道。由3.2介绍的应用流程可以看出,作为非法截获信息的第三方,能够得到的信息只有作为“挑战”的随机数和作为“响应”的HMAC结果,无法根据这两个数据推算出 密钥。由于不知道 密钥,所以无法仿造出一致的响应。

 

 

 

你可能感兴趣的:(日记 - HMAC应用)