Я разрабатываю API, похожий на AWS S3.
Но подпись, сгенерированная моим кодом, отличается от подписи AWS.
import hashlib
import hmac
import base64
def hmac_base64_signature(key, message):
key = key.encode('utf-8')
message = message.encode('utf-8')
hmac_new = hmac.new(key, message, hashlib.sha1)
print(hmac_new.hexdigest())
signature = base64.b64encode(hmac_new.digest()).decode('iso_8859_1')
print(signature)
return signature
if __name__ == '__main__':
hmac_base64_signature(
'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
'GET\n\n\nTue, 27 Mar 2007 19:36:42 +0000\n/awsexamplebucket/photos/puppy.jpg')
I ' m 9bb7966554d7d2f1c419bab302b7c69bd5c114a4
для hma c и m7eWZVTX0vHEGbqzArfGm9XBFKQ=
для подписи base64. Которые отличаются от значений в выборке AWS (то есть bWq2s1WEIj+Ydj0vQ697zp+IXMU=
).
https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html#RESTAuthenticationExamples
Я также попробовал некоторые онлайн-инструменты. Они также дают разные результаты для одного и того же ввода.
https://www.freeformatter.com/hmac-generator.html
https://codebeautify.org/hmac-generator
Я не могу найти любые сообщения об ошибках образцов AWS. Так что я думаю, что-то не так с моим кодом. Может ли кто-нибудь помочь с этим? Спасибо.