需要将密钥发送到对方,对方用该密钥进行摘要处理,进行摘要验证。


KeyGenerator keyGenerator= KeyGenerator.getInstance("HmacMd5");
SecretKey secretKey=KeyGenerator.generator();
byte[] key=secretKey.getEncoded();


SecretKey seretKey= new SecretKeySpec(key, "HmacMD5");
Mac mc=Mac.getInstance(secretKey.getAlgorithm());
mac.init(secretKey);
byte[] data=mac.doFinal(data);

public class MACode
{

        //产生密钥
        public static byte[]
initHmacMD5Key() throws Exception{
              KeyGenerator keyGenerator=KeyGenerator. getInstance("HmacMD5");
//            KeyGenerator keyGenerator=KeyGenerator.getInstance("HmacSHA1");
//            KeyGenerator keyGenerator=KeyGenerator.getInstance("HmacSHA256");
//            KeyGenerator keyGenerator=KeyGenerator.getInstance("HmacSHA384");
//            KeyGenerator keyGenerator=KeyGenerator.getInstance("HmacSHA512");
              
              SecretKey secretKey=keyGenerator.generateKey();
               return secretKey.getEncoded();
       }
       
        //进行消息摘要
        public static byte[]
encodeHmacMD5(byte[] data, byte[]
key) throws Exception{
               //还原密钥
              SecretKey secretKey= new SecretKeySpec(key,"HmacMD5" );
//            SecretKey secretKey=new SecretKeySpec(key,"HmacSHA1");
//            SecretKey secretKey=new SecretKeySpec(key,"HmacSHA256");
//            SecretKey secretKey=new SecretKeySpec(key,"HmacSHA384");
//            SecretKey secretKey=new SecretKeySpec(key,"HmacSHA512");
              
               //实例化mac
              Mac mac=Mac. getInstance(secretKey.getAlgorithm());
               //初始化mac
              mac.init(secretKey);
               //返回消息摘要
               return mac.doFinal(data);
       }

        public static final void main(String[]
args) throws Exception{
              String str= "MAC消息摘要" ;
               //初始化密钥
               byte[]
b=initHmacMD5Key();
               //获取消息摘要
               byte[]
data=encodeHmacMD5(str.getBytes(), b);
              System. out.println(new String(Hex.encode(data))); //进行十六进制处理
       }
}

MAC (Message Authentication Code,消息认证码算法)的更多相关文章

  1. 消息认证码 - MAC (Message Authentication Code)

    消息认证包括两个目标 1消息完整性认证: 确保张三发给我的消息是完整的,在传输过程中没有被第三方篡改 2消息的来源认证: 确保这个数据是张三发给我的,而不是李四发给我的 第一个目标通常使用散列函数来达 ...

  2. 29.密码学知识-消息认证码MAC-6——2019年12月19日

    1. 消息认证码 1.1 消息认证 消息认证码(message authentication code)是一种确认完整性并进行认证的技术,取三个单词的首字母,简称为MAC. 思考改进方案? 从哈希函数 ...

  3. 密码学初级教程(五)消息认证码MAC-Message Authentication Code

    密码学家工具箱中的6个重要的工具: 对称密码 公钥密码 单向散列函数 消息认证码 数字签名 伪随机数生成器 MAC能识别出篡改和伪装,也就是既可以确认消息的完整性,也可以进行认证. 消息认证码的输入包 ...

  4. Algorithm:Java加密解密之MAC(消息认证码)

    MD5 消息摘要(数字摘要) 它是把一个文本/文件 通过摘要函数(hash函数)计算出一个结果.然后把文本/文件和摘要结果一同发给接受者接受者接收到文件之后,也进行摘要,把两个摘要结果进行对比.如果一 ...

  5. 为什么要使用消息认证码(MAC)而非对称密钥?

    问题: 看了消息认证码的介绍后,小丽心想"如果用对称密码将消息加密后再发送的话,是不是就不需要消息认证码了呢?"原因有下: 1.对称密码的密文只有使用和加密时相同的密钥才能正确解密 ...

  6. HMAC哈希消息认证码

    收藏 137 14   hmac 编辑 HMAC是密钥相关的哈希运算消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出.   中文名 哈希消息认证码 外文名 H ...

  7. HMAC(Hash-based Message Authentication Code)实现原理

    1.HMAC 概念 HMAC(Hash-based Message Authentication Code)基于 hash 的消息验证码,是 安全通信中必要的组成部件. 主要是 防止消息被篡改,和对称 ...

  8. hmac库 密钥相关的哈希运算消息认证码

    # -*- coding: cp936 -*- #xiaodeng #python 2.7.10 #HMAC是密钥相关的哈希运算消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一 ...

  9. 密码学奇妙之旅、03 HMAC单向散列消息认证码、Golang代码

    HMAC 单向散列消息认证码 消息认证码MAC是用于确认完整性并进行认证的技术,消息认证码的输入包括任意长度的消息和一个发送者和接收者之间共享的密钥(可能还需要共享盐值). HMAC是使用单向散列函数 ...

随机推荐

  1. 深入理解JavaScript中的类继承

    由于写本文时全部是在编辑器中边写代码边写感想的,所以,全部思想都写在代码注释里面了 // 类继承 //todo.1 extends 关键字 class Animal { constructor(nam ...

  2. window.navigator All In One

    window.navigator All In One navigator "use strict"; /** * * @author xgqfrms * @license MIT ...

  3. Web 网站安全测试 & 渗透测试

    Web 网站安全测试 & 渗透测试 Penetration Testing learning path 建一个测试环境来进行渗透测试 安装 Kali Linux -渗透测试操作系统 在虚拟机中 ...

  4. Wi-Fi 6

    Wi-Fi 6 802.11ax https://en.wikipedia.org/wiki/IEEE_802.11ax https://www.wi-fi.org/discover-wi-fi/wi ...

  5. how to check a var whether is number in js

    how to check a var whether is number in js js check var is number Number.isInteger(NaN) false Number ...

  6. macOS & Xnip

    macOS & Xnip close finished notation cancel checked xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许 ...

  7. 边缘计算k8s集群之SuperEdge

    什么是边缘计算? 边缘计算,是指在靠近物或数据源头的一侧,采用网络.计算.存储.应用核心能力为一体的开放平台,就近提供最近端服务.其应用程序在边缘侧发起,产生更快的网络服务响应,满足行业在实时业务.应 ...

  8. java高并发编程基础之AQS

    引言 曾经有一道比较比较经典的面试题"你能够说说java的并发包下面有哪些常见的类?"大多数人应该都可以说出 CountDownLatch.CyclicBarrier.Sempah ...

  9. SecureCRT无法登陆ubuntu问题解决的方法(亲测有效)

    最近在虚拟机安装了几个ubuntu系统玩耍,然后想着用SecureCRT在Windows本地连接但是怎么也连接不上!!!如下,这只是示意图,ip地址是瞎编的,但是情况完全相同,期间尝试过让linux和 ...

  10. Redis缓存中的常见问题

    缓存穿透:是指查询一个Redis和数据库中都不存在的数据. 问题:查询一个Redis和数据库中都不存在的数据,大量请求去访问数据库,导致数据库宕机. 解决办法: 1.根据id查询,如果id是自增的,将 ...