PHP中对hmac_sha1签名算法的实现方法
2024-08-27 22:33:16
最近研究网宿云文档API,其中用到了一种叫hmac_sha1的签名算法;
HMAC-SHA1:
HMAC是哈希运算消息认证码 (Hash-based Message Authentication Code),HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。HMAC-SHA1签名算法是一种常用的签名算法,用于对一段信息进行生成签名摘要。
PHP代码实现:
/**
* 获取hmac_sha1签名的值
* @link 代码来自: http://www.educity.cn/develop/406138.html
*
* @param $str 源串
* @param $key 密钥
*
* @return 签名值
*/
function hmac_sha1($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;
}
}
注:自PHP5.1.2起就已经内置了hash_hmac函数,所以可不必做function_exsits的判断,一行代码便可获取hmac_sha1签名值:
$signature = base64_encode(hash_hmac("sha1", $str, $key, true));
最新文章
- 一个百万数量级的mysql实例
- vue.js 2.0开发(3)
- jsp实现回车登录
- 在使用vs2012中的MVC4出的错误!类型“System.Data.Entity.DbContext”在未被引用的程序集中定义
- Spring如何处理线程并发
- Twitter注册
- 百度云盘demo
- 召回率与准确率[ZZ]
- Objective-C中的内存管理——手动内存管理
- 基于ThinkPHP+AJAX的省市区三级联动
- PACS发展历史
- node.js-v6新版安装过程
- Centos 7.0 zabbix 部署
- WebAPI参数传值string转bool,int转bool相关问题
- sqlserver字符集问题(中文出乱码,排序错误等)
- 【转】在SQL Server中创建用户角色及授权(使用SQL语句)
- DevExpress v18.1新版亮点——WinForms篇(六)
- Java的Reflection机制
- 使用Hash直接登录Windows(HASH传递)
- mysql查看锁表与解锁
热门文章
- BA-siemens-insight_lenum点
- BA--关于干节点和湿节点
- 洛谷——P1802 5倍经验日
- 洛谷 P1270 “访问”美术馆(树形DP)
- jsp 传值jsp 数据库 乱码解决的攻略 全套
- QT5 Failed to load platform plugin &;quot;windows&;quot; 终极解决方式 命令行问题
- 例说Linux内核链表(三)
- swift-判断是否已获得相机、相册权限
- spark Bisecting k-means(二分K均值算法)
- React中多行文本省略不生效原因