Python编码提供不正确的输出

时间:2016-02-20 22:38:31

标签: python api encoding

我在编码

时遇到问题
import hashlib
import hmac

base_string = "&https%3A%2F%2Fsecure.trademe.co.nz%2FOauth%2FRequestToken&oauth_callback%3Dhttp%253A%252F%252Fwww.website-tm-access.co.nz%252Ftrademe-callback%26oauth_consumer_key%3DC74CD73FDBE37D29BDD21BAB54BC70E422%26oauth_nonce%3D7O3kEe%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1285532322%26oauth_version%3D1.0%26scope%3DMyTradeMeRead%252CMyTradeMeWrite".encode()
KEY = b"3B61C8A3FF9F1F6C0DBE436F9B507E08EF&"

result = hmac.new(KEY, base_string, hashlib.sha256).hexdigest()

print(result)

OUTPUT:
    2d60b698a7d5fb318068b13c8f1bdfb99d241e0d2b4a669c337f84aa694f82dc

我试图遵循这个:

  

这是我们的最终基本字符串:

POST&https%3A%2F%2Fsecure.trademe.co.nz%2FOauth%2FRequestToken&oauth_callback%3Dhttp%253A%252F%252Fwww.website-tm-access.co.nz%252Ftrademe-callback%26oauth_consumer_key%3DC74CD73FDBE37D29BDD21BAB54BC70E422%26oauth_nonce%3D7O3kEe%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1285532322%26oauth_version%3D1.0%26scope%3DMyTradeMeRead%252CMyTradeMeWrite
     

要生成签名,我们需要使用HMAC-SHA1来加密   我们的消费者秘密和访问令牌秘密的基本字符串。像我们一样   目前还没有访问令牌,我们只需使用   消费者秘密后跟一个&符号(这是关键)。

3B61C8A3FF9F1F6C0DBE436F9B507E08EF&
     

基本字符串和密钥都应该使用转换为二进制   UTF8编码。在生成结果MAC之后,它应该是   使用标准base-64编码转换回文本格式。在   这个例子,我们得到以下字符串,它成为我们的签名   对于这个请求。

5s3+el078a5AXGi43FBDyfg5yWY=

1 个答案:

答案 0 :(得分:0)

Python代码和示例代码都是正确的,它们被赋予不同的输入字符串,使用不同的SHA函数并生成不同的输出数据编码。

  1. 第一个示例base_string缺少前四个字符:" POST"。
  2. SHA256和SHA1是两个不同的函数,第一个产生32个字节的输出,第二个产生20个字节。
  3. 第一个输出是32个十六进制编码字节,第二个输出是20个Base64编码字节。这与输出匹配。
  4. 你需要小心使一切都匹配。