AWS 签名版本 2 示例不可重现
AWS Signature Version 2 Example not reproducible
喜欢这个问题中的人 (AWS Signature Version 2 - can't reproduce signature from example) I can't run the example of AWS Signature Version 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
为了不依赖于任何编程语言,我们拿一个hash的在线工具,用HmacSHA256计算:https://www.liavaag.org/English/SHA-Generator/HMAC/
但我得到以下哈希值:
xgbYI2xegVYMVTvnhoqc8/opbN0v/5Pn+8i9usAQAjk=
遗憾的是这不是预期值(此处未 URL 编码):
i91nKc4PWAt0JJIdXwz9HxZCJDdiy6cf/Mj6vPxyYIs=
我做错了什么?为什么我计算的哈希值不正确?初始字符串是否正确?如果您设法使用在线工具获得正确的结果,请告诉我它是如何完成的。
TLDR:这是换行符
虽然一些工具和编程语言,特别是那些基于 C 或源自 Unix 的工具和编程语言,其中 C 被大量使用,将 \n
视为换行符的符号或表示,但该网页没有。如果我在网页的 'text' 模式下输入您 Q 中的字符串,它会计算包含反斜杠和小写字母 'en' 的值的 HMAC,而不是 AWS 规范要求的换行符。
如果我输入正确的十六进制输入(包含换行符)为
4745540a656c61737469636d61707265647563652e616d617a6f6e6177732e636f6d0a2f0a4157534163636573734b657949643d414b4941494f53464f444e4e374558414d504c4526416374696f6e3d44657363726962654a6f62466c6f7773265369676e61747572654d6574686f643d486d6163534841323536265369676e617475726556657273696f6e3d322654696d657374616d703d323031312d31302d3033543135253341313925334133302656657273696f6e3d323030392d30332d3331
或在 base64 中为
R0VUCmVsYXN0aWNtYXByZWR1Y2UuYW1hem9uYXdzLmNvbQovCkFXU0FjY2Vzc0tleUlkPUFLSUFJT1NGT0ROTjdFWEFNUExFJkFjdGlvbj1EZXNjcmliZUpvYkZsb3dzJlNpZ25hdHVyZU1ldGhvZD1IbWFjU0hBMjU2JlNpZ25hdHVyZVZlcnNpb249MiZUaW1lc3RhbXA9MjAxMS0xMC0wM1QxNSUzQTE5JTNBMzAmVmVyc2lvbj0yMDA5LTAzLTMx
然后我得到正确的结果(你也应该)。
喜欢这个问题中的人 (AWS Signature Version 2 - can't reproduce signature from example) I can't run the example of AWS Signature Version 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
为了不依赖于任何编程语言,我们拿一个hash的在线工具,用HmacSHA256计算:https://www.liavaag.org/English/SHA-Generator/HMAC/
但我得到以下哈希值:
xgbYI2xegVYMVTvnhoqc8/opbN0v/5Pn+8i9usAQAjk=
遗憾的是这不是预期值(此处未 URL 编码):
i91nKc4PWAt0JJIdXwz9HxZCJDdiy6cf/Mj6vPxyYIs=
我做错了什么?为什么我计算的哈希值不正确?初始字符串是否正确?如果您设法使用在线工具获得正确的结果,请告诉我它是如何完成的。
TLDR:这是换行符
虽然一些工具和编程语言,特别是那些基于 C 或源自 Unix 的工具和编程语言,其中 C 被大量使用,将 \n
视为换行符的符号或表示,但该网页没有。如果我在网页的 'text' 模式下输入您 Q 中的字符串,它会计算包含反斜杠和小写字母 'en' 的值的 HMAC,而不是 AWS 规范要求的换行符。
如果我输入正确的十六进制输入(包含换行符)为
4745540a656c61737469636d61707265647563652e616d617a6f6e6177732e636f6d0a2f0a4157534163636573734b657949643d414b4941494f53464f444e4e374558414d504c4526416374696f6e3d44657363726962654a6f62466c6f7773265369676e61747572654d6574686f643d486d6163534841323536265369676e617475726556657273696f6e3d322654696d657374616d703d323031312d31302d3033543135253341313925334133302656657273696f6e3d323030392d30332d3331
或在 base64 中为
R0VUCmVsYXN0aWNtYXByZWR1Y2UuYW1hem9uYXdzLmNvbQovCkFXU0FjY2Vzc0tleUlkPUFLSUFJT1NGT0ROTjdFWEFNUExFJkFjdGlvbj1EZXNjcmliZUpvYkZsb3dzJlNpZ25hdHVyZU1ldGhvZD1IbWFjU0hBMjU2JlNpZ25hdHVyZVZlcnNpb249MiZUaW1lc3RhbXA9MjAxMS0xMC0wM1QxNSUzQTE5JTNBMzAmVmVyc2lvbj0yMDA5LTAzLTMx
然后我得到正确的结果(你也应该)。