我无法使用 Amazon 和 Go 提供的测试参数获得正确的签名。我的签名哈希函数如下。我按照亚马逊文档使用 SHA-256 和 base64 编码。func HashSignature(str string, secret string) string { mac := hmac.New(sha256.New, []byte(secret)) _, err := mac.Write([]byte(str)) if err != nil { return "" } hash := base64.StdEncoding.EncodeToString(mac.Sum(nil)) hash = url.QueryEscape(hash) return hash}我的签名测试功能如下。我在 Ruby 代码中使用了下面的规范字符串,它生成了正确的预期签名。所以问题似乎出在我的 HashSignature() 函数的输出上,但我看不出我在那里做错了什么。func TestAmazonSignature(t *testing.T) {/* here is the canonical string from Amazon documentation which should yield the expected signature belowGETwebservices.amazon.com/onca/xmlAWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&AssociateTag=mytag-20&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=Images%2CItemAttributes%2COffers%2CReviews&Service=AWSECommerceService&Timestamp=2014-08-18T12%3A00%3A00Z&Version=2013-08-01*/ SECRET_KEY := "1234567890" CANONICAL_STR := "GET\nwebservices.amazon.com\n/onca/xml\nAWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&AssociateTag=mytag-20&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=Images%2CItemAttributes%2COffers%2CReviews&Service=AWSECommerceService&Timestamp=2014-08-18T12%3A00%3A00Z&Version=2013-08-01" EXPECTED := "j7bZM0LXZ9eXeZruTqWm2DIvDYVUU3wxPPpp%2BiXxzQc%3D" if RESULT := HashSignature(CANONICAL_STR, SECRET_KEY); RESULT != EXPECTED { t.Errorf("\nEXPECTED:\n%v\nRESULT:\n%v", EXPECTED, RESULT) } else { fmt.Println("TestAmazonSignature: Signature: OK") }}这是包含所有这些代码的操场链接。
- 1 回答
- 0 关注
- 218 浏览
添加回答
举报
0/150
提交
取消