如何获取CryptoJS结果作为hash_hmac PHP(SHA1)

时间:2017-11-12 15:40:03

标签: javascript php hmac cryptojs hmacsha1

尝试使用带有UTF8密钥的UTF8字符串,使用CryptoJS lib在JS上发布HMAC。像PHP hash_hmac(' sha1',' ...',' ...',true);

PHP:

$buf = ' accept';
$bufferedSecret = '��xDx�����4�J�?)#';

hash_hmac('sha1', $buf, $bufferedSecret, false);
/* d301cae776ed8c5d46ac93bd7441b01af4d1b888 */
hash_hmac('sha1', $buf, $bufferedSecret, true);
/* ���v�]F���tA��Ѹ� */

JavaScript:

var buf = ' accept';
var bufferedSecret = '��xDx�����4�J�?)#';

CryptoJS.HmacSHA1(buf, bufferedSecret).toString();
/* d301cae776ed8c5d46ac93bd7441b01af4d1b888 */
var forBase64 = CryptoJS.HmacSHA1(buf, bufferedSecret);
CryptoJS.enc.Base64.stringify(forBase64);
/* 0wHK53btjF1GrJO9dEGwGvTRuIg= */

如何在JS上获得相同的HMAC(SHA1)UTF8值?

2 个答案:

答案 0 :(得分:0)

缓冲区到UTF8

您可以使用toString方法获取缓冲区并使用JavaScript将其转换为UTF-8;请确保您在参数中指定了哪种格式,合适的值为hexutf8,请阅读更多here

var buf = ' accept';
var bufferedSecret = '��xDx�����4�J�?)#';

CryptoJS.HmacSHA1(buf, bufferedSecret).toString('utf8');

答案 1 :(得分:0)

我找到了获得UTF-8 RAW的方法。

从这里使用“convertWordArrayToUint8Array()”: https://gist.github.com/getify/7325764 然后解码它。

var wordArr = CryptoJS.HmacSHA1(buf, bufferedSecret);
var utf8Arr = convertWordArrayToUint8Array(wordArr);
var string = new TextDecoder('utf-8').decode(utf8Arr);