加入收藏 | 设为首页 | 会员中心 | 我要投稿 网站开发网_安阳站长网 (https://www.0518zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

PHP生成腾讯云COS接口需要的请求签名

发布时间:2021-05-25 13:07:27 所属栏目:站长百科 来源:网络整理
导读:副标题#e# COS和请求签名是什么 COS 是腾讯云对象存储的缩写及简称,请求签名是第三方在调用COS相关接口时需要按需提供的、经过特定算法创建而成的一组字符串信息,将唯一的标识当前第三方身份,提供通信双方的身份识别,只有有效的签名COS才会提供服务 目

// 计算签名中的 signature 部分
$signTime = $qSignTime;
$signKey = hash_hmac('sha1',$signTime,$secretKey);
$httpString = "$httpMethodn$httpUrin$httpParametersn$headerStringn";
$sha1edHttpString = sha1($httpString);
$stringToSign = "sha1n$signTimen$sha1edHttpStringn";
$signature = hash_hmac('sha1',$stringToSign,$signKey);
//组合结果
$authorization = "q-sign-algorithm=sha1&q-ak=$secretId&q-sign-time=$qSignTime&q-key-time=$qKeyTime&q-header-list=$header_list&q-url-param-list=$url_param_list&q-signature=$signature";
return $authorization;
}

为了测试,该方法参数应该是多过需要了,前六个参数是已经给出的,是来自用户的,因此直接赋值即可得到下边字符串:

$authorization = "q-sign-algorithm=sha1&q-ak=$secretId&q-sign-time=$qSignTime&q-key-time=$qKeyTime...

$header_list 这个值要符合 q-header-list 规则因此需要计算,逻辑是上文已经描述,是从既定的请求项中抽出 key 组成有序字符串,代码如下:

try{
$tmpArray = array();
foreach( $headers as $key=>$value){
array_push($tmpArray,strtolower($key));
}
sort($tmpArray);
return implode(';',$tmpArray);
}
catch(Exception $error){
return false;
}
}

$url-param-list 上面讲过,这个值是HTTP请求参数,对于 PUT 方法没有 ? 参数,自然值为空,所以代码中“偷懒”直接给了空字符串。

Signature 的计算和需要小心的地方

官方已经给出了完整的算法,PHP 甚至还有写好的代码,应该是很幸福了(但!由于看官方文档看的头晕还是踩了坑,随后一起说明),先看一下 signature 的“格式”:

SignKey = HMAC-SHA1(SecretKey,"[q-key-time]") HttpString = [HttpMethod]n[HttpURI]n[HttpParameters]n[HttpHeaders]n StringToSign = [q-sign-algorithm]n[q-sign-time]nSHA1-HASH(HttpString)n Signature = HMAC-SHA1(SignKey,StringToSign)

再看一下 Signature 的完整算法:

$signTime = $qSignTime; $signKey = hash_hmac('sha1',$secretKey); $httpString = "$httpMethodn$httpUrin$httpParametersn$headerStringn"; $sha1edHttpString = sha1($httpString); $stringToSign = "sha1n$signTimen$sha1edHttpStringn"; $signature = hash_hmac('sha1',$signKey);

(编辑:网站开发网_安阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!