BOS签名算法的PHP demo
来源:互联网 发布:打电话变声软件男变女 编辑:程序博客网 时间:2024/06/04 17:57
既然有PHP SDK了,为什么还要写这个签名算法?因为我只会点PHP,签名算法的思路是一样的,只要PHP的demo出来了,C#的还难吗?IOS的还难吗?下面我就结合demo,来讲一下这个认证字符串到底该怎么生成。以码农的思维,咱们就拿代码来说事,不说那一大堆解释了,各位看官看注释就好了。
开放云的签名步骤大致就下面几步:
- 确定AK,SK
- 明确host
- 生成signKey
- 明确这次请求的相对URL路径和方法(GET/POST/PUT)
- 明确这次请求所需要的header
- 生成CanoncialRequest字符串:由三部分构成,CanoncialURL,CanoncialQueryString和CaoncialHeader。
- 生成最终签名
生成认证字符串
<?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:17Zbce-auth-v1/60b4a945e0202a7246ef39525f491b26/2015-10-23T10:31:17Z/3600/ed0497f58088fb9433f3375260c468510be2d6e4f94a21484b23b63efd4d2766PUT/v1/zxdtestbae/image.jpghost:bj.bcebos.comx-bce-date:2015-10-23T10%3A31%3A17Z4ee1a806ca947985018e9591d70561e829274b22ca626c9c92d7f2ac370afea6bce-auth-v1/60b4a945e0202a7246ef39525f491b26/2015-10-23T10:31:17Z/3600/host;x-bce-date/4ee1a806ca947985018e9591d70561e829274b22ca626c9c92d7f2ac370afea6
这里给大家推荐一个比较好用的火狐插件Httprequester:
只需要在Headers里填入你刚才算出来的Authorization,host和x-bce-date。URL中填入你请求的路径。
Content to Send那一项选择你要上传的文件。然后直接点击submit就可以了。看到右边的状态码是200就成功了。
阅读全文
0 0
- BOS签名算法的PHP demo
- PHP RSA2 签名算法
- PHP RSA2 签名算法
- php实现MD5withRSA签名算法
- SHA256WithRSA签名算法(PHP实现)
- 签名算法PHP和Java的不同实现
- PHP的RSA签名
- QQ群红包的算法实现探讨(基于PHP demo)
- android 超简单的手写签名Demo
- PHP微信接口签名算法
- php中使用hash_hmac函数实现HMAC-SHA1签名算法的来龙去脉
- php中使用hash_hmac函数实现HMAC-SHA1签名算法的来龙去脉
- BOS的设计缘由
- Android 手写签名 Demo
- PHP 签名
- 写一个RSA签名与验签的Demo
- QQ群红包的算法实现探讨(基于PHP demo)
- QQ群红包的算法实现探讨(基于PHP demo)
- 1006. 编辑距离
- Jquery UI sortable 所有事件
- 织梦cms模板搭建网站,需要做哪些准备工作?
- Markdown-Math语法
- 1003. Hangover
- BOS签名算法的PHP demo
- 不积跬步,无以至千里
- POJ1328解题报告 (贪心)
- 织梦cms源码下载:响应式3D打印设备公司网站
- Elasticsearch顶尖高手系列课程
- SparkSteaming进行UV统计
- 啥也不想干的时候怎么办呢?
- [linux] tee 命令
- 用Python实现语音合成