我无法找到与链接问题相反的解决方案,并以相同的方式对其进行了测试。由于某些字符,php和javascript给出了不同的值。下面的示例代码给出了不同的输出,但没有附加的字符253 javascript和php匹配。如何修改我的javascript代码以匹配php代码?
$test = 'test'.chr(253);
$key = 'key';
$sign = hash_hmac('sha512',$test,$key,true);
$sign = base64_encode($sign);
var_dump($sign);
/*
oMb9XiT7Y18wYJ7m0kOaIebZrS7eY+/odXmHLq5xPjRVbNfdcwBYQGycRKQ0n7EgqFmF+Ul3oucJHH2AK/IYLw==
*/
var test = 'test'+String.fromCharCode(253);
var key = 'key';
var sign = CryptoJS.HmacSHA512(test,key);
var sign = CryptoJS.enc.Base64.stringify(sign);
Console.log(sign);
/*
rQ5cGz9eMTKQpA3a8zzzNmwoXatSmOiBQBtV1gqs7oAGqn6XMwxq0Ww0tmtVbmpqlEVJ9xeYFMzka749c5vIvQ==
*/
答案 0 :(得分:0)
根据您提问中的链接。 CryptoJS将字符串解释为UTF-8。字符ý
是UTF-8 chr(195).chr(189)
中的两个字节,因此您的JavaScript等同于散列PHP字符串'test'.chr(195).chr(189)
。
要在JavaScript中获取PHP结果,您需要手动使用您想要的编码(Latin1)将数组解析为Cypto.lib.WordArray,以便它不会采用UTF-8:
var test = CryptoJS.enc.Latin1.parse( 'test'+String.fromCharCode(253) );
// oMb9XiT7Y18wYJ7m0kOaIebZrS7eY+/odXmHLq5xPjRVbNfdcwBYQGycRKQ0n7EgqFmF+Ul3oucJHH2AK/IYLw==