java安全(四)HMAC 哈希消息认证

简述

HMAC(消息认证算法)可以理解就是带有秘钥的的摘要算法,它兼容MD和SHA算法的特性,并在此基础上加入了秘钥。(对摘要算法不了解的可以看我的上一篇博客 这里的摘要算法也是以MD5为例)

原理

这里写图片描述

算法公式 : HMAC(K,M)=H(K⊕opad∣H(K⊕ipad∣M))
      H 代表所采用的HASH算法(如MD5)
      K 代表认证密码
      Ko 代表HASH算法的密文
      M 代表一个消息输入
      B 代表H中所处理的块大小,这个大小是处理块大小,而不是输出hash的大小
      
      如,SHA-1和SHA-256 B和MD5的 B= 64
      SHA-384和SHA-512的 B = 128
      L 表示hash的大小 MD5的L=128、SHA-1的L=160。其他的不再一一介绍。
      Opad 用0x5c重复B次
      Ipad 用0x36重复B次


看到这里好晕呀,那么接下来一MD5作为摘要算法来介绍这个加密算法:

1.K:秘钥 它的长度根据摘要算法处理的数据块B的大小来确定的,这里是64位 若秘钥K的长度不足64位 则需要使用0来补位达到64位,太短的秘钥是不受欢迎的 因为太短了安全性就会降低;若秘钥的长度刚好等于64位 就不用处理了;若秘钥的长度大于64位,则需要先对秘钥做摘要算法计算把结果作为秘钥key。
2.Opad 为重复64次的0x5c 就是64个0x5c组成的串。
3.同理 Ipad 是64个0x36组成的串。
(这里有个疑问 若秘钥长度小于等于64 则秘钥处理后变成长度为64的秘钥 若秘钥长度大于64 则秘钥处理后就变成了长度位128的秘钥 他和ipad和opad是如何做与或运算呢?)

算法需要的材料已备好,开始加密了.
1.用处理好的秘钥和inpad做异或运算 生成S1。
2.将待加密的数据放到S1后面 做摘要算法 这里是MD5摘要 生成H。
3.用处理好的秘钥和Opad做异或运算 生成S2。
4.将第三步的H和S2拼接到一起 用MD5做摘要 生成最终的HMAC的密文。

java代码

package util;

import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

/** 
 * @ClassName   : MAC 
 * @Description : java中提供了 HmacMD5、HmacSHA1、HmacSHA256、HmacSHA384和HmacSHA512四中算法支持
 * @author      : wangdx
 * @date        : 2016-3-15 下午10:05:49 
 *  
 */
public class MAC {
   

    public static byte[] initHmacMD5Key()throws Exception{
        //初始化 KeyGenerator
        KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");
        // 产生秘钥
        SecretKey secretKey = keyGenerator.generateKey();
        //获得秘钥
        return secretKey.getEncoded();

    }

    public 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值