为什么要写这篇文档,大多数的用户肯定深有体会,就是BCE的那套API文档太晦涩了,亲们,没图没demo啊,有么有?

既然有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: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:

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

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

php 签名开发,BOS签名算法的PHP demo相关推荐

  1. Thingworx自定义扩展开发(一)- 开发环境搭建、Extension Demo Coding

    系列 Thingworx自定义扩展开发(一)- 开发环境搭建.Extension Demo Coding Thingworx自定义扩展开发(二)- Widget Demo Coding Thingwo ...

  2. Thingworx自定义扩展开发(二)- Widget Demo Coding

    系列 Thingworx自定义扩展开发(一)- 开发环境搭建.Extension Demo Coding Thingworx自定义扩展开发(二)- Widget Demo Coding Thingwo ...

  3. JavaWeb开发基础:连接数据库的demo和数据库连接工具类DB.java

    JavaWeb开发基础:连接数据库的demo和数据库连接工具类DB.java import javax.servlet.*; import javax.servlet.http.*; import j ...

  4. 微信小程序~云开发实现的一个社区 Demo(完结~)

    微信云开发 官方介绍文档 开发者可以使用云开发开发微信小程序.小游戏,无需搭建服务器,即可使用云端能力.云开发为开发者提供完整的云端支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 API 进 ...

  5. 小程序kbone开发---用kbone搭建一个demo环境

    小程序kbone开发-用kbone搭建一个demo环境 微信小程序自诞生以来,渗透到我们生活的方方面面,以其便捷轻量的特点受到了用户的极大欢迎.但是作为开发者的我们,"当 Web 项目完成之 ...

  6. php如何做md5签名,MD5数字签名算法:生成签名和验签(附代码)

    一.背景 为了增加接口的安全性(防止中间人攻击),现增加签名算法.此算法参考微信支付中的签名算法,由于该签名针对前后端,采用了对称算法,如后续接口供给多家第三方接口使用可采用非对称算法.大致整理文档供 ...

  7. 【微信小程序】——实战开发之和风(含demo)

    微信小程序之和风 序 凑了一把微信小程序的热闹!12月,小程序正式发布,很火,但随之而来的是各种冷水,唱衰之调随处可见.但作为一个小前端,岂能有新技术却弃之不顾之理,更何况是微信出品的?抱着学习和研究 ...

  8. Jfinal极速开发微信系列教程--------------Jfinal_weixin demo的使用分析

    如何开发微信?,这个东西大家可以去参考TX的那个微信开发文档,今天主要讲的都是Jfinal_weixin这个东西(如何创建一个WEB项目,如何获取Jfinal_weixin的开发包),也就是官网的那个 ...

  9. 我用unity开发的第一款游戏demo心得

    本人目前大一,双非一本,谨以此博客,记录日后的unity学习过程与算法训练.希望能同大家一起进步!也希望三年后回过头来能看到一个优秀而拼搏的自己! 话不多说,上我的第一个demo(虽然是跟着视频做的) ...

最新文章

  1. java 索引排序_Java培训MySQL之排序分组优化索引的选择
  2. codeblock在linux中安装 出错
  3. 状态模式 处理订单状态_将状态机模式实现为流处理器
  4. 深度学习-Tensorflow1.x-CNN中的padding参数
  5. golang for循环_10. Go语言流程控制:for 循环
  6. golang for range原理(转载)
  7. 金蝶移动bos开发教程_移动安全(四)|NDK开发教程_JavaToC
  8. JavaScript强化教程——Bootstrap
  9. 不得不学的统计学基础知识(二)
  10. MATLAB画简单函数图形
  11. 概率论中两个独立连续随机变量X,Y,变量Z=X+Y的密度函数为X,Y的卷积与特征函数原理
  12. redis缓存hset, hget, hPutAll
  13. 基于因子分析法分析新冠肺炎疫情对房地产业上市公司财务的影响
  14. 51单片机c语言程序执行顺序,51单片机程序执行流程详细分析
  15. flutter在IOS上的登录实现——QQ登录、微信登录、自动识别手机号一键登录、apple登录
  16. 【BLE】BLE扫描参数
  17. 决战Python之巅(一)
  18. 关于反馈:误码与DTX
  19. softlayer 端口开放
  20. Matlab R2022a安装

热门文章

  1. 设计模式-简单工厂模式
  2. 解决ViewPager缓存导致不能实时刷新数据
  3. Oracle快速克隆安装
  4. linux学习一天一个命令(5)[rm命令]
  5. 【转】【RDS教程】专业DBA速成 - CPU优化篇
  6. C/C++基础面试题集锦
  7. RIA Service + dataformc操作例子
  8. linux 数据恢复 ext3grep rm -rf
  9. Windows程序设计_13_伤不起的书
  10. Spark源码阅读03-Spark存储原理之存储分析