Javascript:具有原始BINARY输出的PHP的hash_hmac()是否等效?

Javascript: Equivalent of PHP's hash_hmac() with RAW BINARY output?

我正在连接到Amazon Product Advertising API,并且要签署我的请求,我需要对HMAC-SHA256哈希的原始二进制输出进行base64编码。

在PHP文档hash_hmac中,第四个参数bool $raw_output控制输出是原始二进制数据(true)还是小写的十六进制(false)。 通过将参数设置为true,我的程序可以在PHP中工作。

但是,我现在正尝试将其移植到Javascript。 我尝试使用CryptoJS.HmacSHA256()函数,但它似乎返回小写的十六进制。 如何将其转换为二进制文件?

我已经根据CryptoJS文档尝试了以下方法,但是两个输出是相同的:

1
2
3
var hash = CryptoJS.HmacSHA256("hello","key");
console.log(hash.toString());
console.log(hash.toString(CryptoJS.enc.Base64));

在他们的文档中对此进行了解释。 试试这个:

1
2
3
var hash = CryptoJS.HmacSHA256("Message","Secret Passphrase");

var base64 = hash.toString(CryptoJS.enc.Base64);

为此,您需要包含http://crypto-js.googlecode.com/svn/tags/3.0.2/build/components/enc-base64-min.js。 如果您不包括此选项,则CryptoJS.enc.Base64将是undefined并回退到默认值。

工作演示:http://jsfiddle.net/ak5Qm/