信息摘要技术 - MAC系列

37 篇文章 0 订阅
13 篇文章 0 订阅

MAC算法综合了MD和SHA算法的特性,和MD、SHA算法类似。

MAC算法家族发展历史

MAC算法是含有密钥的散列算法,兼容MD和SHA算法,在此基础上添加了密钥支持,因此也被称为HMAC算法,定义在RFC 2014中,分为两大分支MD和SHA分支:

  • MD分支:HmacMD2、HmacMD4、HmacMD5;
  • SHA分支:HmacSHA1、HmacSHA256、HmacSHA384、HmacSHA512、HmacSHA224

应用场景

MAC算法应用场景也可用在MD和SHA场景下,当更多的用在密钥交换上:

  • AB双方公布MAC算法;
  • A公布密钥给B;
  • A使用密钥对消息做摘要后,发送摘要给B;
  • B收到消息,使用密钥对数据做摘要验证是否一致;

MAC的应用更类似现在的MD5 加 Slat方式,但是更安全。

Java中算法实现

算法摘要长度备注
HmacMD5128JDK 6提供
HmacSHA1160JDK 6提供
HmacSHA256256JDK 6提供
HmacSHA384384JDK 6提供
HmacSHA512512JDK 6提供
HmacMD2128Bouncy Castle实现
HmacMD4128Bouncy Castle实现
HmacSHA224224Bouncy Castle实现

MAC算法的使用,使用MAC类,MAC类要求进行初始化init的时候设置一个密钥,这个密钥一般是有长度要求的,大部分情况下配合使用KeyGenerator产生,KeyGenerator可以根据传入的算法,产生适合算法要求的密钥长度的秘钥,示例代码如下:

public class MACTest {

    public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeyException {
        // 产生一个密钥,MAC的密钥加密时有一定长度要求,可以手动自己按照规定长度产生一个,但是不建议使用
        KeyGenerator keyGen = KeyGenerator.getInstance("HmacMD5");
        SecretKey secretKey = keyGen.generateKey();
        byte[] key = secretKey.getEncoded();

        // 接收方接受密钥后进行信息摘要
        String input = "test";
        SecretKey sKey = new SecretKeySpec(key, "HmacMD5");
        Mac mac = Mac.getInstance("HmacMD5");
        mac.init(sKey);
        byte[] sData = mac.doFinal(input.getBytes());
        System.out.println(new String(HexBin.encode(sData)));
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值