php - 有没有办法从 PHP 生成与 nodejs 相同的 Hmac 哈希输出?
问题描述
以下是我用于创建 HMAC 哈希的nodejs函数 -
function hash() {
key = "hello";
msg = "Hello";
var hmac = crypto.createHmac('sha256', key);
hmac.update(msg, 'utf8');
var digest = hmac.digest();
console.log('---hash =======>' + digest);
return digest;
}
function hmacHex(key, msg) {
var hmac = crypto.createHmac('sha256', key);
hmac.update(msg, 'utf8');
var digest = hmac.digest('hex');
console.log('---hmacHex ====>' + digest);
return digest;
}
var res = hash();
hmacHex("hello", res);
OUTPUT FROM hash() => }/�(K=�����('�Zt�h�\D�Z��@ywڦ�
OUTPUT FROM hmaxHex() => 692a18bd347476d28300e579794ba799cda80625191ef71783fce95692c2b6f9
以下是用于生成上述输出的PHP等效代码 -
class Signature{
public function hash()
{
$key = "hello";
$msg = "Hello";
$hash = hash_hmac('sha256', utf8_encode($msg), $key, true);
error_log('---hash ===>'.$hash);
return $hash;
}
public function hmacHex($msg)
{
$key = "hello";
$hash = hash_hmac('sha256', utf8_encode($msg), $key, false);
error_log('---hmacHex ===>' . $hash);
return $hash;
}
}
$obj = new Signature();
$res = $obj->hash();
$obj->hmacHex($res);
OUTPUT FROM hash() => }/?(K=?????('?Zt?h?\D?Z??@ywڦ?
OUTPUT FROM hmacHex => d920859abc579a070f2f8177e71d8431955784c8ed1d596b3364871ba35b5951
从输出中可以清楚地看出,在 nodejs 中我得到了替换字符,而在 PHP 中它显示为问号。
我试图从我的 PHP 代码中生成完全相同的输出,以便在重新散列输出时它应该是相同的。
解决方案
你的 $key php 端必须是 utf8_encode 因为在节点端crypto.createHmac('sha256', key);
这里的关键是 utf8 编码crypto.createHmac
。
推荐阅读
- flutter - 如何从服务器添加资产 MultiImagePicker?
- c# - C# 使用组选择重复项
- c++ - 当存在多个屏幕时,将 Gtkmm Window 放置在一个显示器的中心
- python - 验证 PIP 的 Python 包兼容性
- dataframe - awk 在每个单元格中以几何顺序乘整数
- react-native - 如何使用 Victory 原生实现实用的烛台图?
- laravel-8 - 找不到混合文件:/assets/css/animate.css
- pandas - 如何对熊猫数据框中的范围值进行排序?
- objectbox - 是否可以通过反向链接关系查询?
- firebase - 如果我要访问的字段不在Firebase中,如何处理