加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

PHP天生腾讯云COS接口必要的哀求署名

发布时间:2021-05-25 15:20:39 所属栏目:编程 来源:网络整理
导读:COS和哀求署名是什么 COS 是腾讯云工具存储的缩写及简称,哀求署名是第三方在挪用COS相干接口时必要按需提供的、颠末特定算法建设而成的一组字符串信息,将独一的标识当前第三方身份,提供通讯两边的身份辨认,只有有用的署名COS才会提供处事 方针 行使 PHP

// 计较署名中的 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);

$signTime:很简朴,起止时刻构成的字符串,从上文拿来直接用 $signKey:HMAC-SHA1 算法直接计较即可

$httpString:四个部门构成必要分隔说

1、$httpMethod:HTTP哀求要领,小写,好比 put、get 2、$httpUri:HTTP哀求的URI部门,从“/”假造根开始,如 /testfile 声名在存储桶根目次下建设一个叫 testfile 的文件,/image/face1.jpg 声名在根目次/image目次下成立一个叫 face1.jpg 的文件,至于是不是图片文件,不管 3、$httpParameters:这是第一个必要警惕的处所。由HTTP原始哀求参数构成,即哀求 URI 中 ? 后头的部门,本例挪用的是 PUT Object 接口,因此为空。假如不为空,必要把哀求参数每一项的 key 和 value 均转换小写,多对 key=value 按字典排序并以 & 相毗连 4、$headerString:这是第二个必要警惕的处所,由 HTTP 原始哀求头构成,按照哀求头,选择所有或部门哀求头,把每项的key都转换为小写,把value都举办URLEncode转换,每项名目都改为key=value,然后凭证key举办字典排序,最后把它们用毗连符 & 构成字符串。这是我清算的逻辑,代码如下:

try{
$tmpArray = array();
foreach($headers as $key => $value){
$tmpKey = strtolower($key);
$tmpArray[$tmpKey] = urlencode($value);
}
ksort($tmpArray);
$headerArray = array();
foreach( $tmpArray as $key => $value){
array_push($headerArray,"$key=$value");
}
return implode('&',$headerArray);
}
catch(Exception $error){
return false;
}
}

为什么要警惕?

HTTP原始哀求头和哀求参数用在了四个处所,别离是哀求署名里的 q-header-list 和 Signature 里的 HttpHeaders——两者都用到了HTTP原始哀求头;哀求署名里的 q-url-param-list 和 Signature 里的 HttpParameters——两者都用到了HTTP哀求参数。必然要担保HTTP哀求头和哀求参数所选用的数目和工具同等

  • 沟通:天生 q-header-list 的HTTP哀求头数目和成员要和天生 HttpHeaders 的沟通,天生 q-url-param-list 的HTTP哀求参数数目和成员要和天生 HttpParameters 的沟通
  • 差异:q-header-list 和 q-url-param-list 只取 key 部门,HttpHeaders 和 HttpParameters 取 key 和 value 部门

输出功效和校验

(编辑:湖南网)

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

热点阅读