HMAC_SHA1(Hashed Message Authentication Code, Secure Hash Algorithm)是一种安全的基于加密hash函数和共享密钥的消息认证协议。

它可以有效地防止数据在传输过程中被截获和篡改,维护了数据的完整性、 可靠性和安全性。HMAC_SHA1消息认证机制的成功在于一个加密的hash函数、

一个加密的随机密钥和一个安全的密钥交换机制。 
HMAC_SHA1 其实还是一种散列算法,只不过是用密钥来求取摘要值的散列算法。 
HMAC_SHA1算法在身份验证和数据完整性方面可以得到很好的应用,在目前网络安全也得到较好的实现。

知识点:

https://www.php.net/manual/en/function.hash-hmac-algos.php

hash_hmac_algos

(PHP 7> = 7.2.0)版本小于7.2报错,注意看手册

hash_hmac_algos - 返回适用于hash_hmac的已注册散列算法列表

返回一个数字索引数组,其中包含适用于hash_hmac()的支持散列算法列表。

例子

<?php
print_r(hash_hmac_algos());

上面的例子将输出类似于:

排列

[0] => md2
[1] => md4
[2] => md5
[3] => sha1
[4] => sha224
[5] => sha256
[6] => sha384
[7] => sha512 / 224
[8] => sha512 / 256
[9] => sha512
[10] => sha3-224
[11] => sha3-256
[12] => sha3-384
[13] => sha3-512
[14] => ripemd128
[15] => ripemd160
[16] => ripemd256
[17] => ripemd320
[18] =>漩涡
[19] => tiger128,3
[20] => tiger160,3
[21] => tiger192,3
[22] => tiger128,4
[23] => tiger160,4
[24] => tiger192,4
[25] => snefru
[26] => snefru256
[27] => gost
[28] => gost-crypto
[29] => haval128,3
[30] => haval160,3
[31] => haval192,3
[32] => haval224,3
[33] => haval256,3
[34] => haval128,4
[35] => haval160,4
[36] => haval192,4
[37] => haval224,4
[38] => haval256,4
[39] => haval128,5
[40] => haval160,5
[41] => haval192,5
[42] => haval224,5
[43] => haval256,5

注意:

在PHP 7.2.0之前,获取支持的哈希算法列表的唯一方法是调用hash_algos(),它还返回不适合hash_hmac()的哈希算法。

(PHP 5> = 5.1.2,PHP 7,PECL哈希> = 1.1)

hash_hmac ( string $algo , string $data , string $key [, bool $raw_output=FALSE ]): string

参数

algo

所选散列算法的名称(即“md5”,“sha256”,“haval160,4”等)。请参阅hash_hmac_algos()以获取支持的算法列表。

data

要散列的消息。

key

用于生成消息摘要的HMAC变体的共享密钥。

raw_output

设置为时TRUE,输出原始二进制数据。 FALSE输出小写的十六进制。

返回值

返回包含计算的消息摘要的字符串作为小写的十六进制,除非raw_output设置为true,在这种情况下返回消息摘要的原始二进制表示形式。未知FALSE时返回algo或是非加密哈希函数。

例:hash_hmac("sha1", $str, $key, true);
/**
* @使用HMAC-SHA1算法生成oauth_signature签名值
*
* @param $key 密钥
* @param $str 源串
*
* @return 签名值
*/ function get_signature($str, $key)
{
$signature = "";
if (function_exists('hash_hmac'))
{
$signature = base64_encode(hash_hmac("sha1", $str, $key, true));
}
else
{
$blocksize = 64;
$hashfunc = 'sha1';
if (strlen($key) &gt; $blocksize)
{
$key = pack('H*', $hashfunc($key));
}
$key = str_pad($key,$blocksize,chr(0x00));
$ipad = str_repeat(chr(0x36),$blocksize);
$opad = str_repeat(chr(0x5c),$blocksize);
$hmac = pack(
'H*',$hashfunc(
($key^$opad).pack(
'H*',$hashfunc(
($key^$ipad).$str
)
)
)
);
$signature = base64_encode($hmac);
} return $signature;

PHP HMAC_SHA1 算法 生成算法签名的更多相关文章

  1. 解决用SHA256算法做私钥签名时,遇到“指定的算法无效”的问题

    在上一篇随笔“记一次三方接口开发的数据加密方案”中,使用SHA256对数据进行签名时,我提到了一个异常,System.Security.Cryptography.CryptographicExcept ...

  2. 如何做系列(4)-微博URL短网址生成算法原理(java版、php版实现实例)

    短网址(Short URL),顾名思义就是在形式上比较短的网址.通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流.目前已经有许多类似服务,借助短网址您可以用简短的网址替代 ...

  3. ZeroMQ接口函数之 :zmq_z85_decode – 从一个用Z85算法生成的文本中解析出二进制密码

    ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_z85_decode zmq_z85_decode(3)         ØMQ Manual - ØMQ/4.1 ...

  4. PHP使用SnowFlake算法生成唯一ID

    前言:最近需要做一套CMS系统,由于功能比较单一,而且要求灵活,所以放弃了WP这样的成熟系统,自己做一套相对简单一点的.文章的详情页URL想要做成url伪静态的格式即xxx.html 其中xxx考虑过 ...

  5. 一个UUID生成算法的C语言实现 --- WIN32版本 .

    一个UUID生成算法的C语言实现——WIN32版本   cheungmine 2007-9-16   根据定义,UUID(Universally Unique IDentifier,也称GUID)在时 ...

  6. 分布式全局不重复ID生成算法

    分布式全局不重复ID生成算法 算法全局id唯一id  在分布式系统中经常会使用到生成全局唯一不重复ID的情况.本篇博客介绍生成的一些方法. 常见的一些方式: 1.通过DB做全局自增操作 优点:简单.高 ...

  7. C++ 基于凸包的Delaunay三角网生成算法

    Delaunay三角网,写了用半天,调试BUG用了2天……醉了. 基本思路比较简单,但效率并不是很快. 1. 先生成一个凸包: 2. 只考虑凸包上的点,将凸包环切,生成一个三角网,暂时不考虑Delau ...

  8. C++ 凸包生成算法

    由于我的极差记忆力,我打算把这个破玩意先记下来.因为以后会有改动(Delaunay三角网生成算法),我不想把一个好的东西改坏了... 好吧-- 凸包生成算法,: 1.先在指定的宽(width)高(he ...

  9. RocketMQ msgId生成算法

    当我们用RocketMQ发送信息的时候通常都会返回如下信息: SendResult [sendStatus=SEND_OK, msgId=0A42333A0DC818B4AAC246C290FD000 ...

随机推荐

  1. 课程作业——Python基础之使用turtle库画出红旗

    代码如下: import turtle # 设置画笔和背景颜色 turtle.color('yellow') turtle.bgcolor('red') # 通过偏移量和尺寸大小画星星 def dra ...

  2. mapper代理开发步骤

    1:先写Mapper接口,UserMapper.java 2:然后遵循4条开发规范,写映射文件,UserMapper.xml 3:将映射文件,UserMapper.xml加入到SqlMapConfig ...

  3. crontab -e 怎么保存后退出?

    退出 ctrl + z

  4. sublime快捷方式小结

    插件 package control安装 代码地址:https://packagecontrol.io/installation //TEXT3 import urllib.request,os,ha ...

  5. cookie 和 session区别

    cookie 和 session区别 ① cookie介绍说明 cookie 存放在浏览器缓存中---浏览器进行查看(谷歌) [设置]---[高级]---[内容设置]---[cookie]---[所有 ...

  6. 洛谷P2197 nim游戏(Nim游戏)

    题目描述 甲,乙两个人玩Nim取石子游戏. nim游戏的规则是这样的:地上有n堆石子(每堆石子数量小于10000),每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取完,不能不取.每次只能从一堆里 ...

  7. SAP MM MM17里不能修改物料主数据'Purchasing Value Key'字段值?

    SAP MM MM17里不能修改物料主数据'Purchasing Value Key'字段值? 记得在D项目上线之前数据导入系统之后,业务提出一些物料采购视图里的’Purchasing value k ...

  8. 浅谈EditText控件的inputType类型

    android:inputType="none"--默认 android:inputType="text"--输入文本字符 android:inputType= ...

  9. ImportError: No module named simplejson.scanner

    一.出现ImportError: No module named simplejson.scanner,是没有安装simplejson,安装一下就好了. 安装指令:python setup.py in ...

  10. (网页)bootstrap模态框手动关闭(转)

    在菜鸟教程上的bootstrap 上面的模态框上看到的: 下面是一些可与 modal() 一起使用的有用的方法. $('#identifier').modal({ keyboard: false }) ...