Hmac算法

Hmac算法就是一种基于密钥的消息认证码算法,它的全称是Hash-based Message Authentication Code,是一种更安全的消息摘要算法。

Hmac算法总是和某种哈希算法配合起来用的。例如,我们使用MD5算法,对应的就是HmacMD5算法,它相当于“加盐”的MD5。

因此,HmacMD5可以看作带有一个安全的key的MD5。使用HmacMD5有如下好处:

  • HmacMD5使用的key长度是64字节,更安全;
  • Hmac是标准算法,同样适用于SHA-1等其他哈希算法;
  • Hmac输出和原有的哈希算法长度一致。

可见,Hmac本质上就是把key混入摘要的算法。验证此哈希时,除了原始的输入数据,还要提供key。

为了保证安全,我们不会自己指定key,而是通过Java标准库的KeyGenerator生成一个安全的随机的key。下面是使用HmacMD5的代码:

public class TestDemo {
     public static void main(String[] args) throws Exception {
             //通过名称HmacMD5获取KeyGenerator实例
            KeyGenerator keyGen = KeyGenerator.getInstance("HmacMD5");
            //通过KeyGenerator创建一个SecretKey实例
            SecretKey key = keyGen.generateKey();
            // 打印随机生成的key:
            byte[] skey = key.getEncoded();
            System.out.println(new BigInteger(1, skey).toString(16));
            // 通过名称HmacMD5获取Mac实例
            Mac mac = Mac.getInstance("HmacMD5");
            //用SecretKey初始化Mac实例
            mac.init(key);
            //对Mac实例反复调用update(byte[])输入数据
            mac.update("HelloWorld".getBytes("UTF-8"));
            //调用Mac实例的doFinal()获取最终的哈希值
            byte[] result = mac.doFinal();
            System.out.println(new BigInteger(1, result).toString(16));
        }
         
     
          
}
posted @ 2020-08-28 15:21  自信的咸鱼  阅读(920)  评论(0编辑  收藏  举报