php hmacsha1计算,PHP HMAC_SHA1 算法 生成算法签名

牧业
2023-12-01

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()的支持散列算法列表。

例子

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;

解决用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 读写properties (配置)文件

Properties属性文件在Java应用程序中是经常可以看得见的,也是特别重要的一类文件.它用来配置应用程序的一些信息,不过这些信息一般都是比较少的数据,没有必要使用数据库文件来保存,而使用一般的文 ...

夺命雷公狗---node.js---17之项目的构建在node+express+mongo的博客项目2之一,二级路由

然后我们就来开始搭建后台了... 不过后台我们可以来玩玩他的二级路由... 然后再去修改下他们的样式即可......修改方法和刚才那里的修改方法一样, 访问效果如下所示: OK,已经正常相识了

让QT编译快一点(增加基础头文件)

姚冬,中老年程序员 进藤光.杨个毛.欧阳修 等人赞同 我是来反对楼上某些答案的.我曾经用MFC写了金山词霸(大约20多万行),又用Qt写了YY语音(大约100多万行),算是对两种框架都比较有经验.纠正 ...

网站论坛同步用户,整合api,实现…

在网上参考了很多资料后,终于完美实现了网站和discuz!nt论坛的双向整合,整合后网站和论坛之间可以同步注册.登录.退出和修改登录密码操作. 本系统的实现形式是新云CMS网站(ASP)和Discuz ...

vmware 14 新安装centos7 没法联网

vmware14 刚安装好centos7后,想下载安装一些软件发现无法联网,于是就百度了一下.下面 记录下解决方法. 1 确报主机能上网. 2 设置虚拟机网络适配器 3 设置虚拟机网卡 4 修改cen ...

java中synchronized关键字分析

今天我们来分析一下java中synchronized关键字.首先来看一段java代码:(本地编译环境为mac,jdk1.8的环境) Demo.java package com.example.spri ...

JVM调优推荐

此文已由作者赵计刚薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1.JVM的调优主要是内存的调优,主要调两个方面: 各个代的大小 垃圾收集器选择 2.各个代的大小 常用的 ...

Python开发【项目】:生产环境下实时统计网站访问日志信息

日志实时分析系统 生产环境下有需求:要每搁五分钟统计下这段时间内的网站访问量.UV.独立IP等信息,用直观的数据表格表现出来 环境描述: 网站为Nginx服务,系统每日凌晨会对日志进行分割,拷贝到其他 ...

Web | Webpack快速上手

概述 Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源. 一般我们在开发中都是使用终端去进行安装,使用npm,关于npm ...

Javascript 中 == 与=== 对比

首先,== equality 等同,=== identity 恒等. ==, 两边值类型不同的时候,要先进行类型转换,再比较. ===,不做类型转换,类型不同的一定不等. 下面分别说明: 先说 === ...

 类似资料: