欢迎您来到腾讯云!积分商城

腾讯云腾讯云论坛

 找回密码
 立即注册
忘了密码?

扫一扫,访问微社区

快捷导航
搜索
查看: 877|回复: 1

[经验分享] COS V5签名生成(PHP版)

[复制链接]

13

主题

0

好友

1820

积分

攻城师[LV3]

Rank: 3Rank: 3Rank: 3

云币
7122
威望
1820
发表于 2018-6-7 15:50:11 |显示全部楼层 |未分类
应用场景:对象存储V5签名
环境要求:PHP
具体代码:
  1. <?php
  2. /**
  3. * php 签名样例
  4. * @param string $method 请求类型 method
  5. * @param string $filename 文件名称
  6. * @return string 签名字符串
  7. */
  8. function getAuthorization($secretid, $secretkey, $method, $filename)
  9. {
  10.     // 获取个人 API 密钥 https://console.qcloud.com/capi
  11.     $SecretId = $secretid;
  12.     $SecretKey = $secretkey;
  13.     // 整理参数
  14.     $queryParams = array();
  15.     $headers = array();
  16.     $method = strtolower($method ? $method : 'head');
  17.     $filename = $filename ? $filename : '/';
  18.     substr($filename, 0, 1) != '/' && ($filename = '/' . $filename);
  19.     // 工具方法
  20.     function getObjectKeys($obj)
  21.     {
  22.         $list = array_keys($obj);
  23.         sort($list);
  24.         return $list;
  25.     }
  26.     function obj2str($obj)
  27.     {
  28.         $list = array();
  29.         $keyList = getObjectKeys($obj);
  30.         $len = count($keyList);
  31.         for ($i = 0; $i < $len; $i++) {
  32.             $key = $keyList[$i];
  33.             $val = isset($obj[$key]) ? $obj[$key] : '';
  34.             $key = strtolower($key);
  35.             $list[] = rawurlencode($key) . '=' . rawurlencode($val);
  36.         }
  37.         return implode('&', $list);
  38.     }
  39.     // 要用到的 Authorization 参数列表
  40.     $qSignAlgorithm = 'sha1';
  41.     $qAk = $SecretId;
  42.     $qSignTime = (string)(time() - 60) . ';' . (string)(time() + 3600);
  43.     $qKeyTime = $qSignTime;
  44.     $qHeaderList = strtolower(implode(';', getObjectKeys($headers)));
  45.     $qUrlParamList = strtolower(implode(';', getObjectKeys($queryParams)));
  46.     // 签名算法说明文档:https://www.qcloud.com/document/product/436/7778
  47.     // 步骤一:计算 SignKey
  48.     $signKey = hash_hmac("sha1", $qKeyTime, $SecretKey);
  49.     // 步骤二:构成 FormatString
  50.     $formatString = implode("\n", array(strtolower($method), $filename, obj2str($queryParams), obj2str($headers), ''));
  51.     // 步骤三:计算 StringToSign
  52.     $stringToSign = implode("\n", array('sha1', $qSignTime, sha1($formatString), ''));
  53.     // 步骤四:计算 Signature
  54.     $qSignature = hash_hmac('sha1', $stringToSign, $signKey);
  55.     // 步骤五:构造 Authorization
  56.     $authorization = implode('&', array(
  57.         'q-sign-algorithm=' . $qSignAlgorithm,
  58.         'q-ak=' . $qAk,
  59.         'q-sign-time=' . $qSignTime,
  60.         'q-key-time=' . $qKeyTime,
  61.         'q-header-list=' . $qHeaderList,
  62.         'q-url-param-list=' . $qUrlParamList,
  63.         'q-signature=' . $qSignature
  64.     ));
  65.     return $authorization;
  66. }

  67. $SecretId = 'AKIDNYU9YgtusdHfgslkjsc7MPEoAH7bsdk';
  68. $SecretKey = 'oiu65pJcqqb6MN9fwykHZafdsbhjkles';
  69. $Method = 'GET';
  70. $Cos_Path = '/';
  71. $sign = getAuthorization($SecretId, $SecretKey, $Method, $Cos_Path);
  72. print_r($sign);
复制代码
运行方法:修改SecretId/SecretKey以及Method和Cos_Path参数后直接运行即可。
效果图:
sign.png

0

主题

0

好友

60

积分

小白[LV1]

Rank: 1

云币
240
威望
60
发表于 2018-9-21 20:34:32 |显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册
您需要登录后才可以发帖 QQ登录

联系我们|腾讯云平台|积分商城|腾讯云官方论坛    

GMT+8, 2018-11-13 15:55 , Processed in 1.173060 second(s), 31 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部