Java消息摘要算法MAC实现与应用完整示例

 更新时间:2019年09月05日 09:35:19   作者:cakincqm  
这篇文章主要介绍了Java消息摘要算法MAC实现与应用,结合完整实例形式分析了java消息摘要算法MAC的概念、原理、实现方法及相关操作注意事项,需要的朋友可以参考下

本文实例讲述了Java消息摘要算法MAC实现与应用。分享给大家供大家参考,具体如下:

一 介绍

MAC:Message Authentication Code
HMAC:keyed-Hash Message Authencication Code,含有密钥的散列函数算法。
融合MD、SHA
MD系列:HmacMD2、HmacMD4、HmacMD5
SHA系列:HmacSHA1、HmacSHA224、HmacSHA256、HmacSHA384、HmacSHA512
应用:SecureCRT

二 参数说明

三 代码实现

package com.imooc.security.hmac;
import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Hex;
import org.bouncycastle.crypto.digests.MD5Digest;
import org.bouncycastle.crypto.macs.HMac;
import org.bouncycastle.crypto.params.KeyParameter;
public class ImoocHmac {
    private static String src = "cakin24 security hmac";
    public static void main(String[] args) {
         jdkHmacMD5();
         bcHmacMD5();
    }
    public static void jdkHmacMD5() {
        try {
            KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");//初始化KeyGenerator
            SecretKey secretKey = keyGenerator.generateKey();//产生密钥
//            byte[] key = secretKey.getEncoded();//获得密钥
            byte[] key = Hex.decodeHex(new char[] {'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'});
            SecretKey restoreSecretKey = new SecretKeySpec(key, "HmacMD5");//还原密钥
            Mac mac = Mac.getInstance(restoreSecretKey.getAlgorithm());//实例化MAC
            mac.init(restoreSecretKey);//初始化Mac
            byte[] hmacMD5Bytes = mac.doFinal(src.getBytes());//执行摘要
            System.out.println("jdk hmacMD5 : " + Hex.encodeHexString(hmacMD5Bytes));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void bcHmacMD5() {
        HMac hmac = new HMac(new MD5Digest());
        hmac.init(new KeyParameter(org.bouncycastle.util.encoders.Hex.decode("aaaaaaaaaa")));
        hmac.update(src.getBytes(), 0, src.getBytes().length);
        byte[] hmacMD5Bytes = new byte[hmac.getMacSize()];//执行摘要
        hmac.doFinal(hmacMD5Bytes, 0);
        System.out.println("bc hmacMD5 : " + org.bouncycastle.util.encoders.Hex.toHexString(hmacMD5Bytes));
    }
}

四 实现效果

jdk hmacMD5 : d23aa029b2bacdd3979d10f0931f9af6
bc hmacMD5 : d23aa029b2bacdd3979d10f0931f9af6

五 应用场景

更多关于java相关内容感兴趣的读者可查看本站专题:《Java数学运算技巧总结》、《Java数据结构与算法教程》、《Java字符与字符串操作技巧总结》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • @CacheEvict中的allEntries与beforeInvocation的区别说明

    @CacheEvict中的allEntries与beforeInvocation的区别说明

    这篇文章主要介绍了@CacheEvict中的allEntries与beforeInvocation的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 聊聊Object类中的wait()和notify()方法

    聊聊Object类中的wait()和notify()方法

    这篇文章主要介绍了Object类中的wait()和notify()方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • java 语句块的使用详解及实例

    java 语句块的使用详解及实例

    这篇文章主要介绍了java 用语句块的正确方法实例详解的相关资料,需要的朋友可以参考下
    2017-01-01
  • Java根据正整数的位数并逆序打印出各位数字

    Java根据正整数的位数并逆序打印出各位数字

    给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字,需要的朋友可以参考下
    2017-02-02
  • javaweb页面附件、图片下载及打开(实现方法)

    javaweb页面附件、图片下载及打开(实现方法)

    下面小编就为大家带来一篇javaweb页面附件、图片下载及打开(实现方法)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Java 给PDF签名时添加可信时间戳的方法

    Java 给PDF签名时添加可信时间戳的方法

    这篇文章主要介绍了Java 给PDF签名时添加可信时间戳,关于jar导入的问题,本文给大家带来两种方法,一种是手动导入另一种是maven配置导入,需要的朋友可以参考下
    2021-07-07
  • @Value设置默认值后,获取不到配置值的原因分析

    @Value设置默认值后,获取不到配置值的原因分析

    这篇文章主要介绍了@Value设置默认值后,获取不到配置值的原因,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • SpringBoot整合高德地图天气查询的全过程

    SpringBoot整合高德地图天气查询的全过程

    这篇文章主要给大家介绍了关于SpringBoot整合高德地图天气查询的相关资料,文中通过图文介绍的非常详细,对大家学习或者使用springboot具有一定的参考学习价值,需要的朋友可以参考下
    2021-12-12
  • Java实现非对称加密的三种方法

    Java实现非对称加密的三种方法

    本文主要介绍了Java实现非对称加密的三种方法,主要包括非对称加密算法--DH(密钥交换),非对称加密算法--RSA,非对称加密算法--EIGamal,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • Java使用JMeter进行高并发测试

    Java使用JMeter进行高并发测试

    软件的压力测试是一种保证软件质量的行为,本文主要介绍了Java使用JMeter进行高并发测试,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11

最新评论