BOS签名算法的PHP demo

既然有PHP SDK了,为什么还要写这个签名算法?因为我只会点PHP,签名算法的思路是一样的,只要PHP的demo出来了,C#的还难吗?IOS的还难吗?下面我就结合demo,来讲一下这个认证字符串到底该怎么生成。以码农的思维,咱们就拿代码来说事,不说那一大堆解释了,各位看官看注释就好了。

开放云的签名步骤大致就下面几步:

  1. 确定AK,SK
  2. 明确host
  3. 生成signKey
  4. 明确这次请求的相对URL路径和方法(GET/POST/PUT)
  5. 明确这次请求所需要的header
  6. 生成CanoncialRequest字符串:由三部分构成,CanoncialURL,CanoncialQueryString和CaoncialHeader。
  7. 生成最终签名
  8. 生成认证字符串

     <?php
    
     /*
     生成UTC时间,默认是当前时间。比如说现在北京时间是2015/10/23 16:48:00.
     那么对应的UTC时间就是当前时间减8小时,也就是2015/10/23 8:48:00
     这里最终时间的格式是:2015-10-23T08:48:00Z
     */
     date_default_timezone_set('UTC');
     $timestamp = date("Y-m-d")."T".date("H:i:s")."Z";
     print $timestamp."\n";
    
     $AK = " ";
     $SK = " ";
    
     $expirationPeriodInSeconds = "3600";
    
     /*
     这里要生成signKey,生成signKey需要是将bce-auth-v1+AK+timestamp+过期时间拼接起来形成authStringPrefix.
     然后用签名中使用的HASH算法(HMAC SHA256)将刚才拼接的authStringPrefix和SK签一遍,打印出来signKey。
     */
     $authStringPrefix = "bce-auth-v1"."/".$AK."/".$timestamp."/".$expirationPeriodInSeconds;
     print $authStringPrefix."\n";
    
     $SigningKey=hash_hmac('SHA256',$authStringPrefix,$SK);
     print $SigningKey."\n";
    
     /*
     对于GET请求,建议header里只需要加入host;如果是PUT请求,建议header里添加host和x-bce-date.如果你的header
     里还要加Content-lenth,Content-Type等,要将得到的字符串组按照字典序排序用换行符\n连接起来。
     为了以后拼接方便,创建了header1,header2是将时间进行规范化字符串处理过的,这才是实际Canoncial
     中需要的。
     */
     $CanonicalHeaders1 = "host;"."x-bce-date";
     $CanonicalHeaders2 = "host:bj.bcebos.com\n"."x-bce-date:".urlencode($timestamp);
    
     //可以没有CanoncialString,也就是这一项为空
     $CanonicalString = "";
    
     /*
     当请求是http://bj.bcebos.com/v1/zxdtestbae/image.jpg的时候,CanoncialURL就是下面的/v1/zxdtestbae/
     image.jpg
     */
     $CanonicalURI = "/v1/zxdtestbae/image.jpg"; 
    
     /*CanoncialRequest由请求方法(GET,PUT或者POST), CanoncialURL,CanoncialHeaders组成。*/
     $CanonicalRequest = "PUT\n".$CanonicalURI."\n".$CanonicalString."\n".$CanonicalHeaders2;    //第二步
     print $CanonicalRequest."\n";
    
     /*使用 HMACSHA256 算法,SignKey,CanonicalRequest 生成最终签名*/
     $Signature = hash_hmac('SHA256',$CanonicalRequest,$SigningKey);
     print $Signature."\n";
    
     /*
     生成认证字符串,认证字符串的格式为:
     bce-auth-v1/{AK}/{timestamp}/{expirationPeriodInSeconds}/{CanonicalHeaders1}/{signature}
     */
     $Authorization = "bce-auth-v1/{$AK}/".$timestamp."/{$expirationPeriodInSeconds}/{$CanonicalHeaders1}/{$Signature}";
    
     print $Authorization."\n";
     ?>

最终打印出来的就是:

2015-10-23T10:31:17Z

bce-auth-v1/60b4a945e0202a7246ef39525f491b26/2015-10-23T10:31:17Z/3600/ed0497f58088fb9433f3375260c468510be2d6e4f94a21484b23b63efd4d2766

PUT
/v1/zxdtestbae/image.jpg

host:bj.bcebos.com
x-bce-date:2015-10-23T10%3A31%3A17Z
4ee1a806ca947985018e9591d70561e829274b22ca626c9c92d7f2ac370afea6
bce-auth-v1/60b4a945e0202a7246ef39525f491b26/2015-10-23T10:31:17Z/3600/host;x-bce-date/4ee1a806ca947985018e9591d70561e829274b22ca626c9c92d7f2ac370afea6

这里给大家推荐一个比较好用的火狐插件Httprequester:


Paste_Image.png


只需要在Headers里填入你刚才算出来的Authorization,host和x-bce-date。URL中填入你请求的路径。


Paste_Image.png

Content to Send那一项选择你要上传的文件。然后直接点击submit就可以了。看到右边的状态码是200就成功了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值