消息摘要算法分为三类:


MD(Message Digest):消息摘要


SHA(Secure Hash Algorithm):安全散列


MAC(Message Authentication Code):消息认证码


MAC算法


介绍:


HMAC(keyed-Hash Message Authentication Code):含有密钥的散列函数算法


包含了MD和SHA两个系列的消息摘要算法


HMAC只是在原有的MD和SHA算法的基础上添加了密钥。

import java.nio.charset.Charset;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

/**
 * MAC消息摘要组件
 *
 * */
public class MACCoder {

    public static byte[] HMAC_SHA(byte[] data1,byte[] data2){
        final Charset UTF_8 = Charset.forName("UTF-8");

        try {
            String secret = "0X84NSTAokzW1iWCCLFIzP1JYv1utSUT";

            Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
            SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(UTF_8), "HmacSHA256");
            sha256_HMAC.init(secret_key);

            sha256_HMAC.update(data1);
            sha256_HMAC.update(data2);

            return sha256_HMAC.doFinal();
        }
        catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    public static String getHmacSHA256FingerPrint(String str1,String str2) {
        final Charset UTF_8 = Charset.forName("UTF-8");

        try {
            String secret = "0X84NSTAokzW1iWCCLFIzP1JYv1utSUT";

            Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
            SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(UTF_8), "HmacSHA256");
            sha256_HMAC.init(secret_key);

            sha256_HMAC.update(str1.getBytes(UTF_8));
            sha256_HMAC.update(str2.getBytes(UTF_8));

            byte[] arr= sha256_HMAC.doFinal();
            String retval=Base64.encode(arr);
            return retval;
        }
        catch (Exception e){
            return null;
        }
    }

    /**
     * 进行相关的摘要算法的处理展示
     * @throws Exception
     * **/
    public static void main(String[] args) throws Exception {
        /*final Charset UTF_8 = Charset.forName("UTF-8");

        byte[] datas1="{    \"type\": \"webhook_event\",    \"id\": \"3b8800b1-c416-4e65-aaf2-00b16bbadfc1\",    \"created_at\": \"2019-09-30T02:27:41-07:00\",    \"trigger\": \"FILE.UPLOADED\",    \"webhook\": {        \"id\": \"232295281\",        \"type\": \"webhook\"    },    \"created_by\": {        \"type\": \"user\",        \"id\": \"8571226476\",        \"name\": \"sv ecld-tms-scom-t01\",        \"login\": \"sv-ecld-tms-scan-t01@rakuten.com\"    },    \"source\": {        \"id\": \"532443758714\",        \"type\": \"file\",        \"file_version\": {            \"type\": \"file_version\",            \"id\": \"563691410130\",            \"sha1\": \"1a9f9f000a2c1fe998510028b9a25da013fde0fd\"        },        \"sequence_id\": \"0\",        \"etag\": \"0\",        \"sha1\": \"1a9f9f000a2c1fe998510028b9a25da013fde0fd\",        \"name\": \"0301_JP_20190924205001.csv\",        \"description\": \"\",        \"size\": 105,        \"path_collection\": {            \"total_count\": 2,            \"entries\": [                {                    \"type\": \"folder\",                    \"id\": \"0\",                    \"sequence_id\": null,                    \"etag\": null,                    \"name\": \"All Files\"                },                {                    \"type\": \"folder\",                    \"id\": \"88535556629\",                    \"sequence_id\": \"0\",                    \"etag\": \"0\",                    \"name\": \"T01\"                }            ]        },        \"created_at\": \"2019-09-30T02:27:41-07:00\",        \"modified_at\": \"2019-09-30T02:27:41-07:00\",        \"trashed_at\": null,        \"purged_at\": null,        \"content_created_at\": \"2019-09-30T00:34:07-07:00\",        \"content_modified_at\": \"2019-09-30T00:34:07-07:00\",        \"created_by\": {            \"type\": \"user\",            \"id\": \"8571226476\",            \"name\": \"sv ecld-tms-scom-t01\",            \"login\": \"sv-ecld-tms-scan-t01@rakuten.com\"        },        \"modified_by\": {            \"type\": \"user\",            \"id\": \"8571226476\",            \"name\": \"sv ecld-tms-scom-t01\",            \"login\": \"sv-ecld-tms-scan-t01@rakuten.com\"        },        \"owned_by\": {            \"type\": \"user\",            \"id\": \"8571226476\",            \"name\": \"sv ecld-tms-scom-t01\",            \"login\": \"sv-ecld-tms-scan-t01@rakuten.com\"        },        \"shared_link\": null,        \"parent\": {            \"type\": \"folder\",            \"id\": \"88613793662\",            \"sequence_id\": \"0\",            \"etag\": \"0\",            \"name\": \"T01\"        },        \"item_status\": \"active\"    },    \"additional_info\": []}".getBytes(UTF_8);
        byte[] datas2="2019-12-09T02:27:42-07:00".getBytes(UTF_8);

        byte[] results=MACCoder.HMAC_SHA(datas1,datas2);
        String str=Base64.encode(results);
        System.out.println(str);*/

        String str1="{    \"type\": \"webhook_event\",    \"id\": \"3b8800b1-c416-4e65-aaf2-00b16bbadfc1\",    \"created_at\": \"2019-09-30T02:27:41-07:00\",    \"trigger\": \"FILE.UPLOADED\",    \"webhook\": {        \"id\": \"232295281\",        \"type\": \"webhook\"    },    \"created_by\": {        \"type\": \"user\",        \"id\": \"8571226476\",        \"name\": \"sv ecld-tms-scom-t01\",        \"login\": \"sv-ecld-tms-scan-t01@rakuten.com\"    },    \"source\": {        \"id\": \"532443758714\",        \"type\": \"file\",        \"file_version\": {            \"type\": \"file_version\",            \"id\": \"563691410130\",            \"sha1\": \"1a9f9f000a2c1fe998510028b9a25da013fde0fd\"        },        \"sequence_id\": \"0\",        \"etag\": \"0\",        \"sha1\": \"1a9f9f000a2c1fe998510028b9a25da013fde0fd\",        \"name\": \"0301_JP_20190924205001.csv\",        \"description\": \"\",        \"size\": 105,        \"path_collection\": {            \"total_count\": 2,            \"entries\": [                {                    \"type\": \"folder\",                    \"id\": \"0\",                    \"sequence_id\": null,                    \"etag\": null,                    \"name\": \"All Files\"                },                {                    \"type\": \"folder\",                    \"id\": \"88535556629\",                    \"sequence_id\": \"0\",                    \"etag\": \"0\",                    \"name\": \"T01\"                }            ]        },        \"created_at\": \"2019-09-30T02:27:41-07:00\",        \"modified_at\": \"2019-09-30T02:27:41-07:00\",        \"trashed_at\": null,        \"purged_at\": null,        \"content_created_at\": \"2019-09-30T00:34:07-07:00\",        \"content_modified_at\": \"2019-09-30T00:34:07-07:00\",        \"created_by\": {            \"type\": \"user\",            \"id\": \"8571226476\",            \"name\": \"sv ecld-tms-scom-t01\",            \"login\": \"sv-ecld-tms-scan-t01@rakuten.com\"        },        \"modified_by\": {            \"type\": \"user\",            \"id\": \"8571226476\",            \"name\": \"sv ecld-tms-scom-t01\",            \"login\": \"sv-ecld-tms-scan-t01@rakuten.com\"        },        \"owned_by\": {            \"type\": \"user\",            \"id\": \"8571226476\",            \"name\": \"sv ecld-tms-scom-t01\",            \"login\": \"sv-ecld-tms-scan-t01@rakuten.com\"        },        \"shared_link\": null,        \"parent\": {            \"type\": \"folder\",            \"id\": \"88613793662\",            \"sequence_id\": \"0\",            \"etag\": \"0\",            \"name\": \"T01\"        },        \"item_status\": \"active\"    },    \"additional_info\": []}";
        String str2="2019-12-09T02:27:42-07:00";
        String str=getHmacSHA256FingerPrint(str1,str2);
        System.out.println(str);
    }
}

输出:

9Fck1jx9XL0LbKoJrP80qncEWvsuniI94aWRr1Fvi7I=

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

  1. HmacSHA256摘要算法

    mac(Message Authentication Code,消息认证码算法)是含有密钥散列函数算法,兼容了MD和SHA算法的特性,并在此基础上加上了密钥. 甲乙双方进行数据交换可以采取如下流程完成 ...

  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. GCC 编译流程简介

    GCC-GCC编译流程 序言 对于大多数程序员而言,大家都知道gcc是什么,但是如果不接触到linux平台下的开发,鲜有人真正了解gcc的编译流程,因为windows+IDE的开发模式简直是一条龙全套 ...

  2. HTML&CSS基础-伪类选择器

    HTML&CSS基础-伪类选择器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.html源代码 <!DOCTYPE html> <html> & ...

  3. HTML&CSS基础-内联和块元素

    HTML&CSS基础-内联和块元素 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.html源代码 <!DOCTYPE html> <html> ...

  4. 十大排序代码实现(python)

    目录 冒泡排序 快速排序 简单插入排序 希尔排序 简单选择排序 堆排序 二路归并排序 多路归并排序 计数排序 桶排序 基数排序 写在前面: 参考文章:十大经典排序算法 本文的逻辑顺序基于从第一篇参考博 ...

  5. window下关闭占用端口使用

    怎么在window下关闭端口! 1:查看特定端口被占用情况 命令:   netstat -ano 和 netstat -ano|findstr 端口号 netstat -ano:查看电脑所有端口被占用 ...

  6. csr_matrix

    from scipy.sparse import * row = [0,0,0,1,1,1,2,2,2]#行指标col = [0,1,2,0,1,2,0,1,2]#列指标data = [1,0,1,0 ...

  7. drf框架 - 序列化组件 | Serializer

    序列化组件 知识点:Serializer(偏底层).ModelSerializer(重点).ListModelSerializer(辅助群改) 序列化与反序列化 序列化: 将对象序列化成字符串用户传输 ...

  8. mysql 连接过多解决方案

    方案1.登录mysql控制台:mysql -h192.168.20.199 -uroot -proot flush hosts 方案2.直接重启服务:service mysqld restart(暴力 ...

  9. oracle数据库创建表且主键自增

    唠叨几句:几年前的知识忘却了,整理一下笔记,提供一下方便 1.创建数据库表 设置主键 create table users( userid number(10) primary key, /*主键,自 ...

  10. 180908 input

    input while if # -*- coding:utf-8 -*- flag = 0 while flag == 0 : username = input('请输入用户名:\n') passw ...