hash_mac 带密钥的Hash函数

提示:不需要单独选择加密的算法,结果集里包括了全部的算法。

小知识点

hash_hmac, HMAC 方法生成带有密钥的哈希值。支持多种 hash 算法,比如:hash1, hash256, hash512, crc32, md5 等

消息认证码(带密钥的Hash函数):密码学中,通信实体双方使用的一种验证机制,保证消息数据完整性的一种工具。构造方法由M.Bellare提出,安全性依赖于Hash函数,故也称带密钥的Hash函数。消息认证码是基于密钥和消息摘要所获得的一个值,可用于数据源发认证和完整性校验。

在发送数据之前,发送方首先使用通信双方协商好的散列函数计算其摘要值。在双方共享的会话密钥作用下,由摘要值获得消息验证码。之后,它和数据一起被发送。接收方收到报文后,首先利用会话密钥还原摘要值,同时利用散列函数在本地计算所收到数据的摘要值,并将这两个数据进行比对。若两者相等,则报文通过认证。

Example

PHP
<?php
echo hash_hmac('ripemd160', 'The quick brown fox jumped over the lazy dog.', 'secret');
输出的结果:b8e7ae12510bdfb1812e463a7f086122cf37e4f7
GO
package main

import (
    "crypto/hmac"
    "fmt"

    "golang.org/x/crypto/ripemd160"
)

func main() {
    hash := hmac.New(ripemd160.New, []byte("secret"))
    hash.Write([]byte("The quick brown fox jumped over the lazy dog."))
    fmt.Printf("%x \n", hash.Sum(nil))
}
输出的结果:b8e7ae12510bdfb1812e463a7f086122cf37e4f7