开发者社区> 问答> 正文

批量删除返回SignatureDoesNotMatch

做批量删除,添加Content-MD5内容之后,一直返回这个错误,实在误解,求各位解答。
ACCESS_ID: 84wb5aoz2hkfvw7raqbuvafd
ACCESS_KEY: uFEwAT8H4AbrC5KKPDCxsjHC9pI=



Content-MD5 生成方式如下:
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
             byte[] hash = md5.ComputeHash(this._content);
             this._content.Position = 0;
             md5.Clear();
             this._contentMd5 = Convert.ToBase64String(hash, Base64FormattingOptions.None);


发送内容如下:
POST /thinkcity?delete HTTP/1.1
Date: Sun, 07 Oct 2012 12:56:23 GMT
Content-Type:
Content-MD5: ZdjlNT4JzRvLFHTKwtuIEg==
Authorization: OSS 84wb5aoz2hkfvw7raqbuvafd:aMa2sTvy s8iCR6loSxTMEpifdA=
User-Agent: aliyun-openservices-sdk-dotnet_0.0.0.0
Host: storage.aliyun.com
Content-Length: 87

<Delete><Quiet>true</Quiet><Object><Key>1.76榫嶆棌浼犲.rar</Key></Object></Delete>


返回错误如下:
<?xml version="1.0" encoding="UTF-8"?>
<Error>
  <Code>SignatureDoesNotMatch</Code>
  <Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
  <StringToSignBytes>50 4F 53 54 0A 5A 64 6A 6C 4E 54 34 4A 7A 52 76 4C 46 48 54 4B 77 74 75 49 45 67 3D 3D 0A 0A 53 75 6E 2C 20 30 37 20 4F 63 74 20 32 30 31 32 20 31 32 3A 35 36 3A 32 33 20 47 4D 54 0A 2F 74 68 69 6E 6B 63 69 74 79 3F 64 65 6C 65 74 65 </StringToSignBytes>
  <SignatureProvided>aMa2sTvy s8iCR6loSxTMEpifdA=</SignatureProvided>
  <StringToSign>POST ZdjlNT4JzRvLFHTKwtuIEg==  Sun, 07 Oct 2012 12:56:23 GMT /thinkcity?delete</StringToSign>
  <OSSAccessKeyId>84wb5aoz2hkfvw7raqbuvafd</OSSAccessKeyId>
  <RequestId>50717BF6ACD33BD244118D20</RequestId>
  <HostId>storage.aliyun.com</HostId>
</Error>

展开
收起
siceblue 2012-10-08 11:20:32 12823 0
5 条回答
写回答
取消 提交回答
  • 回楼主siceblue的帖子
    Content-Type和Content-MD5有没有加入到Authorization里?
    2012-10-12 10:01:16
    赞同 展开评论 打赏
  • Re批量删除返回SignatureDoesNotMatch
    楼主能否将你自己签名的字符串及其长度都打印出来呢? 错误提示中表示的是服务器端收到的签名字符串
    2012-10-11 10:48:59
    赞同 展开评论 打赏
  • Re批量删除返回SignatureDoesNotMatch
    std::string char_md5(char* data,size_t len)
            {
                    MD5_CTX md5;
                    unsigned char md[16];
                    string hash="";
                    MD5_Init(&md5);
                    if (len > 0) {
                            MD5_Update(&md5,data, len);
                    }
                    MD5_Final(md,&md5);
                    hash=weblib::base64Encode(md,16);
                    return hash;
            }

    这是我的算法,用到openssl的函数,base64Encode 是自己的函数,将字符数组进行加密


    是这样的 先得到一个16字节的md5数组,不要转成字符串,1个字节就是一个十六进制数,32位的md5字符串就是这16个十六进制数转来的。
    这里先不要转,直接对这个十六进制数的数组进行base64加密就好了。


    其他的语言也类似,总之最后base64加密的 一定是16个十六进制数字的数组。而不是转成字符的32位字符串
    2012-10-09 12:39:36
    赞同 展开评论 打赏
  • Re批量删除返回SignatureDoesNotMatch
    =要转义吗?
    2012-10-08 14:55:35
    赞同 展开评论 打赏
  • Re批量删除返回SignatureDoesNotMatch
    空格是复制代码的时候搞上的,问题应该不是因为这个地方
    2012-10-08 12:50:26
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载