消息摘要算法分为三类:


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. Andrew Ng机器学习 三:Multi-class Classification and Neural Networks

    背景:识别手写数字,给一组数据集ex3data1.mat,,每个样例都为灰度化为20*20像素,也就是每个样例的维度为400,加载这组数据后,我们会有5000*400的矩阵X(5000个样例),会有5 ...

  2. python高级特性-列表生成

    概述 [x *x for x in range(1,11)][k+'='+v for k,v in d.items()] [s.lower() for s in L] 详解 1.单层迭代 >&g ...

  3. 机械师实时调度示例(I) - 实时规划

    OptaPlanner创办人Geoffrey De Smet及其团队,在Red Hat 技术峰会上主题会场上,演示了一个通过OptaPlanner实现实时规划与调度的示例.Geoffrey及其团队专门 ...

  4. 【Bug档案01】Spring Boot的控制器+thymeleaf模板 -使用中出现静态资源加载路径不当的问题 -解决时间:3h

    总结 - thymeleaf的模板解析规则不清楚,或者忘了; - 出现bug时,瞎调试, 没有打开NETWORK 进行查看资源的加载情况 - 控制器中的其他代码,可以先注释掉,这样就可以迅速屏蔽掉其他 ...

  5. 2.遍历XML即添加修改节点

    1.xml <?xml version="1.0" encoding="utf-8" ?> <stories> <story ac ...

  6. P1983 车站分级[拓扑]

    题目描述 一条单向的铁路线上,依次有编号为 1, 2, -, n1,2,-,n的 nn个火车站.每个火车站都有一个级别,最低为 11 级.现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟 ...

  7. xss获取cookie源码附利用代码

    保存为cookie.asp <% testfile=Server.MapPath("cookies.txt") msg=Request("msg") se ...

  8. 为什么要使用ConcurrentHashMap

    好久没写过技术性文章了,还是要坚持下去.掌握的知识,能写出来或者是讲给别人听才是真正的掌握了知识,如果不善于给别人讲,实际上还是没有真正掌握相关的知识,挑个简单的写吧. 面试的时候经常会被问到hash ...

  9. Github的使用/git远程提交代码到Github

    Github的使用/git远程提交代码到Github Github是全球最大的社交编程及代码托管网站 Git是一个开源的分布式版本控制系统 1.基本概念 Repository(仓库):仓库用于存放项目 ...

  10. web实现大文件上传分片上传断点续传

    需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制. 第一步: 前端修改 由于项目使用的是 ...