2012-10-22 30 views
7

मैं एडब्ल्यूएस दस्तावेज द्वारा प्रदत्त example requests और example functions का उपयोग करके, अमेज़ॅन ग्लेशियर अपलोड अनुरोध के लिए हस्ताक्षर उत्पन्न करने का प्रयास कर रहा हूं, लेकिन मैं इसे काम नहीं कर सकता। इस बिंदु पर, मैं कुछ मैं कुछ अविश्वसनीय रूप से स्पष्ट याद कर रहा हूँ कर रहा हूँ:मैं अजगर में एडब्ल्यूएस एपीआई हस्ताक्षर (v4) की गणना कैसे कर सकता हूं?

#!/bin/env python 

import hmac 
import hashlib 

# This string to sign taken from: http://docs.amazonwebservices.com/amazonglacier/latest/dev/amazon-glacier-signing-requests.html#example-signature-calculation 
sts = """AWS4-HMAC-SHA256 
20120525T002453Z 
20120525/us-east-1/glacier/aws4_request 
5f1da1a2d0feb614dd03d71e87928b8e449ac87614479332aced3a701f916743""" 

# These two functions taken from: http://docs.amazonwebservices.com/general/latest/gr/signature-v4-examples.html#signature-v4-examples-python 
def sign(key, msg): 
    return hmac.new(key, msg.encode('utf-8'), hashlib.sha256).hexdigest() 

# The fake secret key is provided by the referenced docs 
def getSignatureKey(): 
    kDate = sign(("AWS4" + "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY").encode('utf-8'), "20120525") 
    kRegion = sign(kDate, "us-east-1") 
    kService = sign(kRegion, "glacier") 
    kSigning = sign(kService, "aws4_request") 
    return kSigning 

signature = sign(getSignatureKey(), sts) 
print signature 

अगर मैं अपने कार्यक्रम चलाने के लिए, मैं निम्नलिखित हैश मिलती है: फिर भी डॉक्स स्पष्ट रूप से राज्य

$ python test.py 
3431315da57da4df28f92895c75364d94b36c745896ad3e580c0a6ae403b1e05 

:

गुप्त एक्सेस कुंजी, wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY, प्रयोग किया जाता है, तो गणना हस्ताक्षर है:

3ce5b2f2fffac9262b4da 9256f8d086b4aaf42eba5f111c21681a65a127b7c2a

मुझे क्या याद आ रही है?

उत्तर

7

आपका कार्य उनके सम्मान से अलग है। आप

def sign(key, msg): 
    return hmac.new(key, msg.encode('utf-8'), hashlib.sha256).hexdigest() 

कर रहे हैं लेकिन वे कर रहे हैं

def sign(key, msg): 
    return hmac.new(key, msg.encode('utf-8'), hashlib.sha256).digest() 

तो अपने व्युत्पन्न कुंजी गलत है। आप केवल प्रक्रिया के अंतिम चरण में हेक्सडिजिस्ट का उपयोग करना चाहते हैं, न कि हस्ताक्षर कुंजी की गणना करते समय।

+4

उसने ऐसा किया। जो भी इसे बाद में पाता है, उसके लिए आप इस उत्तर में दिए गए परिवर्तन को कर सकते हैं, फिर 'आयात बिनससी' को ऊपर ऊपर जोड़ें और 'प्रिंट' लाइन को 'प्रिंट binascii.hexlify (हस्ताक्षर)' में बदलें, python 2.x मानते हैं। – Christopher