Wydaje mi się, że przeczytałem prawie wszystko, co można przeczytać na podstawie kodowania base-64 podpisu w przeglądarce, postu opartego na formularzu do S3: starych dokumentów i nowych dokumentów. Na przykład:Python Generowany podpis dla S3 Post
http://doc.s3.amazonaws.com/proposals/post.html
I nawet znaleźć to:
http://s3.amazonaws.com/doc/s3-example-code/post/post_sample.html
Zamiast używać wyżej lub nowszej generator polityki Amazon, lub bawić się wokół z Inii, próbuję do opracowania prostszy skrypt .py, który ściąga regułę JSON z pliku jawnego tekstu (policy.txt), a następnie generuje niezbędną sygnaturę zakodowaną w standardzie 64, aby pomóc mi przygotować wersję HTML.
Sam podpis (który jest zależny od zakodowanej polityki) NIE jest poprawnie zakodowany ... może z powodu jakiegoś problemu utf-8 vs. ascii lub \ n (newline)?
Skrypt, nad którym pracuję, znajduje się poniżej, zasady i klucz tajny AWS private_key
pochodzą z przypadku testowego AWS, którego używam do sprawdzenia, czy ten skrypt działa. Poprawnie zakodowany podpis - cytowany przez Amazon - jest zawarty w poniższym skrypcie jako odniesienie.
Czy ktoś może mi powiedzieć, dlaczego podpis obliczony poniżej nie pasuje do podpisu odniesienie dostarczone przez Amazon ?:
Innymi słowy:
dlaczego tak jest poprawnie zakodowany:
policy_encoded = base64.b64encode(policy)
ale ten NIE jest:
signature = base64.b64encode(hmac.new(private_key, policy_encoded, sha).digest())
PYTHON podpis c alculator ...
#!/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 encoded is %s." % (signature)
print "Your signature encoded should be 2qCp0odXe7A9IYyUVqn0w2adtCA="
Polityka JSON (policy.txt - UTF-8)
{ "expiration": "2007-12-01T12:00:00.000Z",
"conditions": [
{"bucket": "johnsmith"},
["starts-with", "$key", "user/eric/"],
{"acl": "public-read"},
{"success_action_redirect": "http://johnsmith.s3.amazonaws.com/successful_upload.html"},
["starts-with", "$Content-Type", "image/"],
{"x-amz-meta-uuid": "14365123651274"},
["starts-with", "$x-amz-meta-tag", ""]
]
}
Rik: ugh ...Tak mi przykro! Nawet ich nie widziałem! :(Trudno było przekonać redaktora SO do zaakceptowania bloku JSON z wcięciami Czy możesz - jednym słowem powiedzieć mi, na czym powinienem się skupić, rozwiązując to ...? – Sean
Użyj 'Ctrl + K' dla wcięcia bloku kodów automatycznie doda 4 spacje, spójrz na to, co edytowałem (kliknij [x min temu] (http://stackoverflow.com/posts/9018767/revisions), aby uzyskać poprzednie wersje). główny kod jest nadal źle sformatowany i jest zbyt "..." i zbyt WORDS. Powiedziałbym również, że twoje pytanie wygląda trochę "przerażająco", skupione pytanie zostanie prawdopodobnie rozwiązane * (pisanie dobrych pytań nigdy nie jest łatwe) * –
W porządku.Dziękuję ... Zwróciliśmy uwagę na zmiany, myślę, że postaram się je zacieśnić i sprawię, że będzie mniej gadatliwy. – Sean