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


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. leetcode17 电话号码的字母组合 dfs

    就dfs吧.... 然后,我傻了.前一道题不用考虑空,这道题就要考虑.... 还有注意vector要引用传递 class Solution { public: void dfs(string temp ...

  2. 2018牛客多校第一场 E-Removal【dp】

    题目链接:戳这里 转自:戳这里 题意:长度为n的序列,删掉m个数字后有多少种不同的序列.n<=10^5,m<=10. 题解:dp[i][j]表示加入第i个数字后,总共删掉j个数字时,有多少 ...

  3. codeforces 878A

    A. Short Program time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  4. console.dir()可以显示一个对象所有的属性和方法

    console.dir()可以显示一个对象所有的属性和方法 具体方法如下:

  5. React Portal All In One

    React Portal All In One react multi root https://reactjs.org/docs/portals.html https://zh-hans.react ...

  6. Git Best Practice All In One

    Git Best Practice All In One git workflow 本地开发环境: 开发人员自测的,可以是自己本地部署的静态服务器,当然也可类似是运行 npm server类似的环境, ...

  7. Typescript All In One

    Typescript All In One TypeScript 3.5 is now available. https://www.typescriptlang.org/#download-link ...

  8. .NET微服务最佳实践 eShopOnContainers

    本文翻译自微软Docs, 内嵌译者多年使用的参悟,如理解有误,请不吝赐教. 微软与社区专家合作,开发了功能齐全的云原生微服务示例应用eShopOnContainers. 该应用旨在展示使用.NET.D ...

  9. Linux下部署Apache+PHP

    Linux下部署Apache+PHP 编辑于2021-02-19 本文中Apache配置文件目录为/etc/httpd/conf/httpd.conf,PHP安装目录为/usr/local/php 一 ...

  10. Vue学习笔记-vue-element-admin 前端学习

    一  使用环境 开发系统: windows 后端IDE: PyCharm 前端IDE: VSCode 数据库: msyql,navicat 编程语言: python3.7  (Windows x86- ...