2013-05-17 33 views
9

tôi đang trải qua API Amazon Quảng cáo sản phẩm REST signature docs và tôi đã bị mắc kẹt ở vị trí thứ 8Tính một RFC 2104-compliant HMAC với các thuật toán SHA256 băm trong ruby ​​

Tính một RFC 2104-compliant HMAC với SHA256 thuật toán băm bằng cách sử dụng chuỗi ở trên với Khóa truy cập bí mật "giả" của chúng tôi: 1234567890. Để biết thêm thông tin về bước này, hãy xem tài liệu và mẫu mã cho ngôn ngữ lập trình của bạn.

Nevermind, đã cố gắng để thử nó một lần nữa với sự trợ giúp của Calculating a SHA hash with a string + secret key in python. Sẽ đăng câu trả lời dưới đây.

Trả lời

15

Sau đây tạo ra chữ ký chính xác:

require 'openssl' 

secret_key = '1234567890' 
query = 'AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&Version=2009-01-06' 
data = ['GET', 'ecs.amazonaws.com', '/onca/xml', query].join("\n") 
sha256 = OpenSSL::Digest::SHA256.new 
sig = OpenSSL::HMAC.digest(sha256, secret_key, data) 
signature = Base64.encode64(sig) 
+0

Oh Tuyệt vời nhất! – gr8scott06

+0

URL webservices.amazon.com đã thay đổi thành ecs.amazonaws.com và bạn phải cập nhật nó để tạo chữ ký hợp lệ. – OskarH

+0

@HippieBandJam tôi giả sử bạn có nghĩa là chỉ url, nhưng bạn có phiền chỉnh sửa câu trả lời của tôi không? – AJcodez

2

Thêm vào AJcodez câu trả lời:

tôi sẽ làm:

... 
signature_raw = Base64.strict_encode64(sig) 
signature  = CGI::escape(signature_raw) 

encode64 thêm một dòng mới ở cuối, strict_encode64() không.

https://stackoverflow.com/a/2621023/2760406

Amazon muốn bạn "URL mã hóa các cộng (+) và (=) nhân vật bình đẳng trong chữ ký" # 9 - sẽ không làm việc ngay bây giờ nếu bạn không.

http://docs.aws.amazon.com/AWSECommerceService/latest/DG/rest-signature.html#rest_detailedexample

Các vấn đề liên quan