我想我已经阅读了几乎所有关于签名的base-64编码的内容,用于浏览器内,基于表单的帖子到S3:旧文档和新文档.例如:
http://doc.s3.amazonaws.com/proposals/post.html
甚至发现了这个:
http://s3.amazonaws.com/doc/s3-example-code/post/post_sample.html
我没有使用上面或亚马逊的新策略生成器,也没有使用Boto,我试图草拟一个更简单的.py脚本,它从明文文件(policy.txt)中提取策略JSON,然后生成必要的基础 - 64位编码签名,帮助我起草HTML表单.
签名本身(依赖于编码策略)未被正确编码...可能是由于某种utf-8与ascii或\n(换行)问题?
我正在使用的脚本如下,策略和AWS Secret Key private_key来自我正在使用的AWS测试用例,以查看此脚本是否有效.正确编码的签名 - 由亚马逊引用 - 包含在下面的脚本中以供参考.
谁能告诉我为什么下面计算的签名与亚马逊提供的参考签名不符?
换一种说法:
为什么这是正确编码的:
policy_encoded = base64.b64encode(policy)
Run Code Online (Sandbox Code Playgroud)
但这个不是:
signature = base64.b64encode(hmac.new(private_key, policy_encoded, sha).digest())
Run Code Online (Sandbox Code Playgroud)
PYTHON签名计算器......
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import base64, hmac, sha
from sys import argv
script, policy = argv
private_key = 'uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o'
input = open("..Desktop/policy.txt", "rb")
policy = input.read()
policy_encoded = base64.b64encode(policy)
signature = base64.b64encode(hmac.new(private_key, policy_encoded, sha).digest())
print "Your policy base-64 encoded is %s." % (policy_encoded)
print "Your signature base-64 …Run Code Online (Sandbox Code Playgroud)