最近研究网宿云文档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));

最新文章

  1. 一个百万数量级的mysql实例
  2. vue.js 2.0开发(3)
  3. jsp实现回车登录
  4. 在使用vs2012中的MVC4出的错误!类型“System.Data.Entity.DbContext”在未被引用的程序集中定义
  5. Spring如何处理线程并发
  6. Twitter注册
  7. 百度云盘demo
  8. 召回率与准确率[ZZ]
  9. Objective-C中的内存管理——手动内存管理
  10. 基于ThinkPHP+AJAX的省市区三级联动
  11. PACS发展历史
  12. node.js-v6新版安装过程
  13. Centos 7.0 zabbix 部署
  14. WebAPI参数传值string转bool,int转bool相关问题
  15. sqlserver字符集问题(中文出乱码,排序错误等)
  16. 【转】在SQL Server中创建用户角色及授权(使用SQL语句)
  17. DevExpress v18.1新版亮点——WinForms篇(六)
  18. Java的Reflection机制
  19. 使用Hash直接登录Windows(HASH传递)
  20. mysql查看锁表与解锁

热门文章

  1. BA-siemens-insight_lenum点
  2. BA--关于干节点和湿节点
  3. 洛谷——P1802 5倍经验日
  4. 洛谷 P1270 “访问”美术馆(树形DP)
  5. jsp 传值jsp 数据库 乱码解决的攻略 全套
  6. QT5 Failed to load platform plugin "windows" 终极解决方式 命令行问题
  7. 例说Linux内核链表(三)
  8. swift-判断是否已获得相机、相册权限
  9. spark Bisecting k-means(二分K均值算法)
  10. React中多行文本省略不生效原因