Javascript: эквивалент PHP hash_hmac () с выходом RAW BINARY?

Я подключаюсь к API рекламы продукта Amazon и подписываю свой запрос. Мне нужно, чтобы base64-кодировал необработанный двоичный вывод хеша HMAC-SHA256.

В документации PHP для hash_hmac четвертый параметр bool $raw_output контролирует, являются ли выходные данные необработанными двоичными данными (true) или нижними строками (false). Моя программа работает в PHP, просто устанавливая этот параметр в true.

Тем не менее, я теперь пытаюсь передать это Javascript. Я попытался использовать функцию CryptoJS.HmacSHA256 (), но, похоже, он возвращает строчные шестнадцатеричные символы. Как я могу преобразовать это в двоичный?

Я пробовал следующее в соответствии с документацией CryptoJS, но оба выхода идентичны:

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

Solutions Collecting From Web of "Javascript: эквивалент PHP hash_hmac () с выходом RAW BINARY?"

Это объясняется в их документации . Попробуй это:

 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/

PHP-код

 echo base64_encode(hash_hmac('SHA1', 'shanghai', '0', true).'beijing'); 

выход php

 xvBv49PpaYvXAIfy3iOSDWNQj89iZWlqaW5n 

код узла

 var crypto = require('crypto'); var buf1 = crypto.createHmac("sha1", "0").update("shanghai").digest(); var buf2 = Buffer.from('beijing'); console.log(Buffer.concat([buf1, buf2]).toString('base64')); 

вывод узла

 xvBv49PpaYvXAIfy3iOSDWNQj89iZWlqaW5n