在JavaScript(不是Node.js)上使用UTF-8输入生成SHA1 HMAC

在JavaScript(不是Node.js)上使用UTF-8输入生成SHA1 HMAC,javascript,utf-8,hmac,cryptojs,hmacsha1,Javascript,Utf 8,Hmac,Cryptojs,Hmacsha1,有了这个自由: 缓冲hmac的秘密: var packedSecr = pack('H*', $secret); 超过打包时间: var packedTime = pack('NN', 0, Math.floor((time() + $time_offset) / 30)); 两个字符串都有UTF-8字符,并且与PHPs压缩完全一致。 我需要创建hash_hmac,这里有一个问题: function hash_hmac(str,key){ var hash = CryptoJS.Hm

有了这个自由: 缓冲hmac的秘密:

var packedSecr = pack('H*', $secret);
超过打包时间:

var packedTime = pack('NN', 0, Math.floor((time() + $time_offset) / 30));
两个字符串都有UTF-8字符,并且与PHPs压缩完全一致。 我需要创建hash_hmac,这里有一个问题:

function hash_hmac(str,key){
    var hash = CryptoJS.HmacSHA1(str, key);
    var resInUTF8 = convertWordArrayToUint8Array(hash);
    var string = new TextDecoder('utf-8').decode(resInUTF8);
    console.log(hash.toString());
    /* 5cdc66cb8cf2a08b78f149502e05b9538c7a72a9*/
    console.log(string);
    /* \�fˌ�x�IP.�S�zr� */
    return string;
}
但PHP制造了不同的hmac:

$hmac = hash_hmac('sha1', $packedTime, $bufferedSecret, true);
echo $hmac;
/* v��j��q����V��� */
$hmac = hash_hmac('sha1', $packedTime, $bufferedSecret, false);
echo $hmac;
/* 17761ff6f06ad0db71f0a588fcf002d756c1d1eb */
对于使用该迷你库的convert WordArray:

如果我只是创建带有“A-z”和“0-9”符号的hmac,那么所有符号都是一致的。 PHP:

JS:

$string = "aBc059";
$secret = "Tcs437";
echo hash_hmac('sha1', $string, $secret, false); 
/* 00012176b13b26f8fdb9f8dfcaf553e9aa0401ac */
echo hash_hmac('sha1', $string, $secret, true);
/* !v�;&�������S�� */
var string = "aBc059";
var secret = "Tcs437";

hash_hmac(string,secret)

function hash_hmac(str,key){
    var hash = CryptoJS.HmacSHA1(str, key);
    var resInUTF8 = convertWordArrayToUint8Array(hash);
    var string = new TextDecoder('utf-8').decode(resInUTF8);
    console.log(hash.toString());
    /* 00012176b13b26f8fdb9f8dfcaf553e9aa0401ac */
    console.log(string);
    /* !v�;&�������S�� */
    return string;
}