mac(Message Authentication Code,消息认证码算法)是含有密钥散列函数算法,兼容了MD和SHA算法的特性,并在此基础上加上了密钥。


甲乙双方进行数据交换可以采取如下流程完成


1、甲方向乙方公布摘要算法(就是指定要使用的摘要算法名)


2、甲乙双方按照约定构造密钥,双方拥有相同的密钥(一般是一方构造密钥后通知另外一方,此过程不需要通过程序实现,就是双方约定个字符串,但是这个字符串可不是随便设定的,也是通过相关算法获取的)


3、甲方使用密钥对消息做摘要处理,然后将消息和生成的摘要消息一同发送给乙方


4、乙方收到消息后,使用甲方已经公布的摘要算法+约定好的密钥 对收到的消息进行摘要处理。然后比对自己的摘要消息和甲方发过来的摘要消息。甄别消息是否是甲方发送过来的

import java.nio.charset.Charset;

import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
/**
 * MAC消息摘要组件
 *
 * */
public class MACCoder {
    private static final Charset UTF_8 = Charset.forName("UTF-8");

    /**
     * 初始化HmacSHA256的密钥
     * @return byte[] 密钥
     *
     * */
    public static byte[] initHmacSHA256Key() throws Exception{
        //初始化KeyGenerator
        KeyGenerator keyGenerator=KeyGenerator.getInstance("HmacSHA256");
        //产生密钥
        SecretKey secretKey=keyGenerator.generateKey();
        //获取密钥
        return secretKey.getEncoded();
    }

    public static byte[] encodeHmacSHA256_2(byte[] data1,byte[] key) throws Exception{
        SecretKey secretKey=new SecretKeySpec(key,"HmacSHA256");
        Mac mac=Mac.getInstance(secretKey.getAlgorithm());
        mac.init(secretKey);

        mac.update(data1);

        return mac.doFinal();
    }

    /**
     * 进行相关的摘要算法的处理展示
     * @throws Exception
     * **/
    public static void main(String[] args) throws Exception {
        String str="2019-12-09T02:27:42-07:00";
        System.out.println("原文="+str);

        byte[] key=MACCoder.initHmacSHA256Key();
        //byte[] key="0X84NSTAokzW1iWCCLFIzP1JYv1utSUT".getBytes(UTF_8);

        byte[] datas=MACCoder.encodeHmacSHA256_2(str.getBytes(UTF_8), key);
        System.out.println("HmacSHA256的密钥:"+key.toString());
        System.out.println("HmacSHA256算法摘要:"+new String(datas));
        System.out.println();
    }
}

输出:

原文=2019-12-09T02:27:42-07:00
HmacSHA256的密钥:[B@1ff8b8f
HmacSHA256算法摘要:�

--END-- 2019-12-10 10:15

HmacSHA256摘要算法的更多相关文章

  1. HmacSHA256摘要算法2 MACCoder

    消息摘要算法分为三类: MD(Message Digest):消息摘要 SHA(Secure Hash Algorithm):安全散列 MAC(Message Authentication Code) ...

  2. 消息摘要算法-MAC算法系列

    一.简述 mac(Message Authentication Code,消息认证码算法)是含有密钥散列函数算法,兼容了MD和SHA算法的特性,并在此基础上加上了密钥.因此MAC算法也经常被称作HMA ...

  3. 消息摘要算法-HMAC算法

    一.简述 mac(Message Authentication Code.消息认证码算法)是含有密钥散列函数算法.兼容了MD和SHA算法的特性,并在此基础上加上了密钥.因此MAC算法也常常被称作HMA ...

  4. 信息摘要算法之五:HMAC算法分析与实现

    MAC(Message Authentication Code,消息认证码算法)是含有密钥散列函数算法,兼容了MD和SHA算法的特性,并在此基础上加上了密钥.因此MAC算法也经常被称作HMAC算法. ...

  5. password学4——Java 加密解密之消息摘要算法(MD5 SHA MAC)

    Java 加密解密之消息摘要算法(MD5 SHA MAC) 消息摘要 消息摘要(Message Digest)又称为数字摘要(Digital Digest). 它是一个唯一相应一个消息或文本的固定长度 ...

  6. 第五章 消息摘要算法--MAC

    注意:本节内容主要参考自<Java加密与解密的艺术(第2版)>第6章“验证数据完整性--消息摘要算法” 5.1.mac(又称为Hmac) 原理:在md与sha系列算法的基础上加入了密钥,是 ...

  7. Java编码算法和摘要算法

    编码算法 编码算法是将一种形式转换成等价的另外一种形式.主要是为了方便某种特定场景的处理. 字母如何在计算机中表示呢? 用ASCII编码 那中文字符如何在计算机中表示呢? 用Unicode编码 如何同 ...

  8. MD、SHA、MAC消息摘要算法实现与应用

    1.消息摘要概述 消息摘要(Message Digest)又称为数字摘要(Digital Digest).它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生 ...

  9. 廖雪峰Java10加密与安全-3摘要算法-5Hmac

    1 比较MD5和HamcMD5 HmacMD5可以看作带安全salt的MD5 import javax.crypto.KeyGenerator; import javax.crypto.Mac; im ...

随机推荐

  1. Python——数据类型公用功能

    1.索引 表示从哪里开始取值. 支持类型 str 列表 dict 不支持类型 int bool a= '1234567' print(a[1:])#指从哪开始读取,1为从1号元素开始.默认为0 pri ...

  2. linux学习记录--比较基本的文件档案知识

    [档案类型权限,连接数,档案拥有者,档案所属群组,档案容量,修改日期,档名],对应了上面的每一列的参数属性. 档案类型权限那一部分总共有十个字母,第一个字母代表档案类型: 当为[ d ]则是目录,例如 ...

  3. java容器二:List接口实现类源码分析

    一.ArrayList 1.存储结构 动态数组elementData transient Object[] elementData; 除此之外还有一些数据 //默认初始容量 private stati ...

  4. maven 项目打包配置(build节点)

    参考博客:https://www.cnblogs.com/Binhua-Liu/p/5604841.html maven-assembly-plugin的使用 : https://www.cnblog ...

  5. 使用safe-rm替换rm命令,防止误删除

    1.下载safe源码包: wget https://launchpad.net/safe-rm/trunk/0.12/+download/safe-rm-0.12.tar.gz 2.解压safe-rm ...

  6. 【小技巧】O(1)快速乘

    问题:求 \(a\times b\bmod p\),\(a,b,p\) 在 long long 范围内. 在 CRT 等算法中应用广泛. 为了处理模数在 int 范围外的情况,就是两数相乘可能会爆 l ...

  7. python - django (视图)

    # """ 一:# 视图 (接收请求返回响应的那部分) FBV版:基于 函数的 请求 CBV版:基于 类的 请求 注册方法: url(r'^add_publisher/' ...

  8. Go读写文件

    Go序列化和反序列化 package main import ( "bufio" "encoding/json" "fmt" "o ...

  9. PHP流程控制之do...while循环的区别

    do...while与while的语法结构基本一样,也是一个布尔型循环,功能也基本一样.大理石平台价格 基本语法规定如下: do {    //代码块 } while (判断); do...while ...

  10. [转载]pythonnet

    python与c#的交互模块pythonnethttp://www.cnblogs.com/tester-zhenghan/p/5406521.html [集成IronPython] 添加CLR对象到 ...