我正在从事一个AWS项目,需要获得一个签名,以便在我可以通过http将音频文件发布到s3存储桶之前对自己进行身份验证
在AWS文档(https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html)及其示例之后,我有以下python代码:
import hmac
import hashlib
def sign(key, msg):
return hmac.new(key, msg.encode("utf-8"), hashlib.sha256).digest()
def getSignatureKey(key, dateStamp, regionName, serviceName):
kDate = sign(("AWS4" + key).encode("utf-8"), dateStamp)
kRegion = sign(kDate, regionName)
kService = sign(kRegion, serviceName)
kSigning = sign(kService, "aws4_request")
kFinal = kSigning.encode("hex")
return kFinal
def finalsignature (key,msg):
kFinalSign = sign (key, msg)
kFinalSignature = kFinalSign.encode("hex")
return kFinalSignature
return kFinalSign
val = getSignatureKey("wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY","20151229","us-east-1","s3")
KKfinalsignature = finalsignature(val,"eyAiZXhwaXJhdGlvbiI6ICIyMDE1LTEyLTMwVDEyOjAwOjAwLjAwMFoiLA0KICAiY29uZGl0aW9ucyI6IFsNCiAgICB7ImJ1Y2tldCI6ICJzaWd2NGV4YW1wbGVidWNrZXQifSwNCiAgICBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAidXNlci91c2VyMS8iXSwNCiAgICB7ImFjbCI6ICJwdWJsaWMtcmVhZCJ9LA0KICAgIHsic3VjY2Vzc19hY3Rpb25fcmVkaXJlY3QiOiAiaHR0cDovL3NpZ3Y0ZXhhbXBsZWJ1Y2tldC5zMy5hbWF6b25hd3MuY29tL3N1Y2Nlc3NmdWxfdXBsb2FkLmh0bWwifSwNCiAgICBbInN0YXJ0cy13aXRoIiwgIiRDb250ZW50LVR5cGUiLCAiaW1hZ2UvIl0sDQogICAgeyJ4LWFtei1tZXRhLXV1aWQiOiAiMTQzNjUxMjM2NTEyNzQifSwNCiAgICB7IngtYW16LXNlcnZlci1zaWRlLWVuY3J5cHRpb24iOiAiQUVTMjU2In0sDQogICAgWyJzdGFydHMtd2l0aCIsICIkeC1hbXotbWV0YS10YWciLCAiIl0sDQoNCiAgICB7IngtYW16LWNyZWRlbnRpYWwiOiAiQUtJQUlPU0ZPRE5ON0VYQU1QTEUvMjAxNTEyMjkvdXMtZWFzdC0xL3MzL2F3czRfcmVxdWVzdCJ9LA0KICAgIHsieC1hbXotYWxnb3JpdGhtIjogIkFXUzQtSE1BQy1TSEEyNTYifSwNCiAgICB7IngtYW16LWRhdGUiOiAiMjAxNTEyMjlUMDAwMDAwWiIgfQ0KICBdDQp9")
print (val) #prints out the signing key
print ('\n')
print (KKfinalsignature)#prints out the final signature
根据我之前的尝试和其他示例,签名密钥应该是正确的,但我的代码似乎无法正确地对最终签名进行签名,而不是获得:
正确签名:
8afdbf4008c03f22c2cd3cdb72e4afbb1f6a588f3255ac628749a66d7f09699e
我的代码输出:
074f00bbb8e273a0430131de18ed898fd3ad31663d7aed7835d7b658e689d64d
有人能检查一下我的代码有什么问题吗
谢谢
在创建签名之前,签名密钥不应采用十六进制编码。它应该以二进制形式使用
而不是:
做:
完整脚本:
相关问题 更多 >
编程相关推荐