gpt4 book ai didi

php - NodeJS 从 HMAC 返回其他二进制结果而不是 php

转载 作者:行者123 更新时间:2023-12-03 12:15:01 26 4
gpt4 key购买 nike

我在 Windows 上运行 node.js 和 php,并使用 node.js 中包含的加密模块。

php脚本:

hash_hmac("sha256", "foo", "bar", true) // the true enables binary output

输出:

¶y3!è¬╝♂ï►ó│Ñ├Fä╚┘CA╝±G6▄rp¸t↑Q



Node.js 脚本:
crypto.createHmac("sha256", "bar").update("foo").digest("binary");

输出:

¶y3!?ª¼♂?►¢³¥ÃF?ÈÙCA¼ñG6Ürp÷t↑Q



我也想知道为什么有些数字是相同的,而有些则不是。

我还尝试获取十六进制而不是二进制结果,它们都是 输出相同 .
hash_hmac("sha256", "foo", "bar", false); // false outputs hex data
crypto.createHmac("sha256", "bar").update("foo").digest("hex"); // notice "hex"

这不是一个解决方案,因为我未能将十六进制数据转换为二进制:
var hmac = crypto.createHmac("sha256", "bar").update("foo").digest("hex");
var binary = new Buffer(hmac, "hex");

变量 binary输出:

¶y3!???♂?►????F???CA??G6?rp?t↑Q

最佳答案

在为 OTP simplepay 实现 Node js 解决方案时,我遇到了同样的问题。

PHP代码:

base64_encode(hash_hmac('SHA384', $text, trim($key), true));

JS代码:
function get_hash(key, text) {
const crypto = require("crypto");
const algorithm = "sha384";

var hmac = crypto.createHmac(algorithm, key).update(text);
return hmac.digest().toString('base64');
}

所以两者都注销/回显 - 给出相同的结果。
在您的情况下,二进制输出将是:
crypto.createHmac("sha256", "bar").update("foo").digest().toString('binary');

但是,请记住,由于字符编码,记录和回显二进制字符串会给出稍微不同的 View 。您可以看到相同的字符,但也可以看到不同的字符。

PHP 回显

,cAW'B��o��傱�@�Vlάf�R@y�,?0�^1=Y�����u2





Node 控制台.log

,cAW'BÛåoº°å±¹@VlάfÞ꧸§u2



其实都是一样的,只是看起来不一样。
this github issue and addaleax's comment

关于php - NodeJS 从 HMAC 返回其他二进制结果而不是 php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28840052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com