javascript - 匹配 PHP 和 CryptoJS 输出
问题描述
我找不到与链接问题相反的解决方案,并以相同的方式对其进行了测试。由于某些字符,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==
*/
解决方案
根据您在问题中包含的链接。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==
推荐阅读
- php - 在 Visual Studio Code 中使用 Xdebug 调试 php 时出现“错误评估代码”
- flask - 我已经尝试了所有在 Flask 中禁用 css 缓存的常用方法,但它们都不适合我
- javascript - 将下拉列表中的项目导入 SharePoint 列表
- python - 变量输出上的 Sympy 替换
- c# - 使用 AddAutomationFocusChangedEventHandler 进行焦点跟踪会在 WPF 中触发多个事件
- python - 将其转换为 xlsx 后如何压缩(单个 zip 文件)多个熊猫数据帧?
- parallel-processing - 区分 SIMD 和 MIMD 的实际应用示例有哪些
- reactjs - 在 ReactJS 中集成 Mapbox 的错误
- c++ - 如何将十六进制字符串转换为字符数组
- azure - 使用 Azure 数据工厂删除 Excel 文件中的特定行