AWS Signature Version 2示例不可复制

时间:2018-08-12 04:40:30

标签: amazon-web-services hmac

像这个问题的人(AWS Signature Version 2 - can't reproduce signature from example)我无法运行AWS Signature版本2(https://docs.aws.amazon.com/general/latest/gr/signature-version-2.html)的示例。

我们有一个字符串:

GET\nelasticmapreduce.amazonaws.com\n/\nAWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Action=DescribeJobFlows&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2011-10-03T15%3A19%3A30&Version=2009-03-31

和示例密钥

wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

要独立于任何编程语言,请使用HmacSHA256计算的哈希在线工具:https://www.liavaag.org/English/SHA-Generator/HMAC/

但是我得到以下哈希值:

xgbYI2xegVYMVTvnhoqc8/opbN0v/5Pn+8i9usAQAjk=

可惜这不是期望值(此处未进行网址编码):

i91nKc4PWAt0JJIdXwz9HxZCJDdiy6cf/Mj6vPxyYIs=

我做错了什么?为什么我对哈希值的计算不正确?初始字符串正确吗?如果您设法通过在线工具获得正确的结果,请告诉我它是如何完成的。

1 个答案:

答案 0 :(得分:3)

TLDR:是换行符

尽管某些工具和编程语言,尤其是那些基于C或起源于Unix的工具和编程语言(其中C被大量使用),将\n视为换行符或表示,但该网页却没有。如果我在网页的“文本”模式下从您的Q输入字符串,它将计算HMAC值,该值包含反斜杠和小写字母“ en”,而不是AWS规范要求的换行符。

如果我以十六进制输入正确的输入(包含换行符),则为

4745540a656c61737469636d61707265647563652e616d617a6f6e6177732e636f6d0a2f0a4157534163636573734b657949643d414b4941494f53464f444e4e374558414d504c4526416374696f6e3d44657363726962654a6f62466c6f7773265369676e61747572654d6574686f643d486d6163534841323536265369676e617475726556657273696f6e3d322654696d657374616d703d323031312d31302d3033543135253341313925334133302656657273696f6e3d323030392d30332d3331

或在base64中为

R0VUCmVsYXN0aWNtYXByZWR1Y2UuYW1hem9uYXdzLmNvbQovCkFXU0FjY2Vzc0tleUlkPUFLSUFJT1NGT0ROTjdFWEFNUExFJkFjdGlvbj1EZXNjcmliZUpvYkZsb3dzJlNpZ25hdHVyZU1ldGhvZD1IbWFjU0hBMjU2JlNpZ25hdHVyZVZlcnNpb249MiZUaW1lc3RhbXA9MjAxMS0xMC0wM1QxNSUzQTE5JTNBMzAmVmVyc2lvbj0yMDA5LTAzLTMx

然后我得到正确的结果(您也应该如此)。