当前位置:首页 > 操作系统 > MacOs

PHP-OpenSSL HMAC-SHA1摘要与加密的不匹配

我花了6个小时来实现消息签名算法.它根本无法正常工作:

这是生成摘要的PHP代码:

<code>$payload = "thisisanapple";
$signature = hash_hmac("sha1", $payload, "thisisarandomkey");
$data = base64_encode($signature);
// YzExZWRmZDliMjQzNTZjNzhlNmE3ZTdmMDE3ODJjNmMxMmM4ZTllMQ==
</code>

这是运行在Node.js服务器上的JS,其作用相同:

<code>var hmac = crypto.createHmac('sha1', "thisisarandomkey");
hmac.update("thisisanapple");
var signature = hmac.digest('base64');
// wR7f2bJDVseOan5/AXgsbBLI6eE=
</code>

我不知道这里出了什么问题.我尝试过SHA256,但它们仍然不同.我还使用了由OpenSSL生成的私钥,无论是明文形式还是在base64中,结果仍然相同(不同的密钥).

解决方法:

hash_hmac有四个参数,最后一个指定输出,默认情况下,hash_hmac返回十六进制字符串,而不是原始数据.因此base64_encode在PHP代码片段中对十六进制字符串进行编码.

这将很好地工作:

<code>$payload = "thisisanapple";
$signature = hash_hmac("sha1", $payload, "thisisarandomkey", true);
$data = base64_encode($signature);
// wR7f2bJDVseOan5/AXgsbBLI6eE=
</code>

【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐