Python2とGolangでHMAC方式のハッシュ値を生成する
HMACでハッシュ値を生成してbase64エンコードしてurlエスケープする。
amazon product apiでsignatureとして使われる値。
python2
import hmac import urllib from hashlib import sha256 from base64 import b64encode key = "key" data = "data" digest = hmac.new(key, data, sha256).digest() signature = urllib.quote(b64encode(digest), '') print signature # UDH%2BPZicbRU3oBP6bnOdojRj%2Fa7DtwE32Cjjas4iG9A%3D
go1.2
package main import ( "crypto/hmac" "crypto/sha256" "encoding/base64" "fmt" "net/url" ) func main() { key := "key" data := "data" hash := hmac.New(sha256.New, []byte(key)) hash.Write([]byte(data)) signature := url.QueryEscape(base64.StdEncoding.EncodeToString(hash.Sum(nil))) fmt.Println(signature) // UDH%2BPZicbRU3oBP6bnOdojRj%2Fa7DtwE32Cjjas4iG9A%3D }
参考:Authentication Parameters - Product Advertising API
関連:pythonとrubyでHMAC-SHA256 - brainstorm