PHP HMAC_SHA1 算法 生成算法签名
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) > $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 算法 生成算法签名的更多相关文章
- 解决用SHA256算法做私钥签名时,遇到“指定的算法无效”的问题
		在上一篇随笔“记一次三方接口开发的数据加密方案”中,使用SHA256对数据进行签名时,我提到了一个异常,System.Security.Cryptography.CryptographicExcept ... 
- 如何做系列(4)-微博URL短网址生成算法原理(java版、php版实现实例)
		短网址(Short URL),顾名思义就是在形式上比较短的网址.通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流.目前已经有许多类似服务,借助短网址您可以用简短的网址替代 ... 
- ZeroMQ接口函数之 :zmq_z85_decode – 从一个用Z85算法生成的文本中解析出二进制密码
		ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_z85_decode zmq_z85_decode(3) ØMQ Manual - ØMQ/4.1 ... 
- PHP使用SnowFlake算法生成唯一ID
		前言:最近需要做一套CMS系统,由于功能比较单一,而且要求灵活,所以放弃了WP这样的成熟系统,自己做一套相对简单一点的.文章的详情页URL想要做成url伪静态的格式即xxx.html 其中xxx考虑过 ... 
- 一个UUID生成算法的C语言实现 --- WIN32版本 .
		一个UUID生成算法的C语言实现——WIN32版本 cheungmine 2007-9-16 根据定义,UUID(Universally Unique IDentifier,也称GUID)在时 ... 
- 分布式全局不重复ID生成算法
		分布式全局不重复ID生成算法 算法全局id唯一id 在分布式系统中经常会使用到生成全局唯一不重复ID的情况.本篇博客介绍生成的一些方法. 常见的一些方式: 1.通过DB做全局自增操作 优点:简单.高 ... 
- C++ 基于凸包的Delaunay三角网生成算法
		Delaunay三角网,写了用半天,调试BUG用了2天……醉了. 基本思路比较简单,但效率并不是很快. 1. 先生成一个凸包: 2. 只考虑凸包上的点,将凸包环切,生成一个三角网,暂时不考虑Delau ... 
- C++ 凸包生成算法
		由于我的极差记忆力,我打算把这个破玩意先记下来.因为以后会有改动(Delaunay三角网生成算法),我不想把一个好的东西改坏了... 好吧-- 凸包生成算法,: 1.先在指定的宽(width)高(he ... 
- RocketMQ msgId生成算法
		当我们用RocketMQ发送信息的时候通常都会返回如下信息: SendResult [sendStatus=SEND_OK, msgId=0A42333A0DC818B4AAC246C290FD000 ... 
随机推荐
- Java中枚举的使用
			Java中枚举其实就是静态常量,今天发现枚举里面其实还能加方法,学习了下, 代码如下: package org.pine.test; import java.util.HashMap; import ... 
- 淘宝cnpm
			npm install -g cnpm --registry=https://registry.npm.taobao.org 
- 2018-10-19 Chrome插件实现GitHub代码离线翻译v0.0.4
			续前文Chrome插件实现GitHub代码翻译v0.0.3. 添加了对驼峰命名的支持. 由于调用浏览器插件-离线英汉词典进行词汇翻译, 因此也不依赖于任何在线翻译服务. Chrome插件: 官网链接 ... 
- git命令详解( 九 )
			此为git第九篇记录 整理提交记录 Git Cherry-pick 交互式的 rebase Git Tags Git Describe 整理提交记录 之前我们已经学习了 Git 的基础知识 ... 
- HTML之元素分类(HTML基础知识)
			HTML之元素分类 一.按照块级元素还是行内元素分类 块级元素(block-level)和行内元素(inline-level,也叫作“内联”元素). a.块级元素(独占一行) 块级元素:其最明显的特征 ... 
- ASP.NET MVC Json的序列化和反序列化
			1.利用js进行序列化成字符串和反序列化 var personObj = {name:"Tom",age:16}; // 利用JS序列化成字符串 var personStr = J ... 
- 上了IPD和CMMI,为什么还要搞敏捷?
			文/资深顾问 杨学明 现在国内许多产品创新型企业一旦研发团队上了规模,就会进行IPD体系的变革或CMMI的认证,但现在还有一种更加流程的开发模式,就是敏捷,华为公司早在2009年正式发文在全公司现在流 ... 
- BitnamiRedmine配置邮件系统备忘
			前几天安装的Redmine邮件系统存在问题,需要换一个,方法记录如下: 修改配置文件: cd ~/redmine/apps/redmine/htdocs/config vi configuration ... 
- 扫码下单使用FAQ
			1.适用情景:扫码点餐支付宝支付报错 解决方案:1.检查主账号上口碑授权是否失效.(重新授权) 2.检查主账号上的PID是否绑定.(绑定PID) 注意:1.支付宝扫码进行的扫码下单支持直连支付宝和蚂蚁 ... 
- linux源
			系统:centos7 x86_64 一.配置本地yum源 1.1加载光驱 1.2挂载到系统 注:如果要长期使用最好把整个镜像文件拷贝到系统下 1.3配置文件 路径/etc/yum.repos.d/ 打 ... 
