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