无法将Node.js编写为PHP哈希检查

时间:2018-02-12 13:42:17

标签: php node.js hash sha256 hmac

以下PHP行很好用,但我不能在Node

中这样做
$secret_key = hash('sha256', XXXX, true);
$hash = hash_hmac('sha256', YYYY, $secret_key);

作为文档sais hash()返回原始二进制数据,但它看起来像utf8字符串。尝试在Node.js中执行此操作

const secret = crypto.createHash('sha256')
const secret_key = secret.update(XXXX).digest('utf8')

const hmac = crypto.createHmac('sha256', secret_key)
const result = hmac.update(YYYY).digest('hex')

所以PHP $hash和Node.js result不一样。尝试使用' hex'没有成功。如何在Node中完全像在PHP中一样重现它?

2 个答案:

答案 0 :(得分:0)

我猜你的错误是让节点导出你的密钥为“utf8”而不是十六进制表示。

在PHP中,您的密钥似乎也显示为十六进制值。

在第一种情况下尝试使用“hex”,看看会发生什么:

const secret = crypto.createHash('sha256')
const secret_key = secret.update(XXXX).digest('hex')

const hmac = crypto.createHmac('sha256', secret_key)
const result = hmac.update(YYYY).digest('hex')

答案 1 :(得分:0)

如果你完全忽略了第一个 <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <form method="POST" > Name<input type="text" name="name" value="" id="name" onblur="Auto()"><br> Value<input type="text" name="auto"> </form> <script type="text/javascript"> function Auto(){ var name=document.getElementById(name); document.write(name); } </script> </body> </html> 的编码,那么你得到相同的字符串:

digest

对应的PHP代码:

const secret = crypto.createHash('sha256')
const secret_key = secret.update('XXXX').digest()

const hmac = crypto.createHmac('sha256', secret_key)
const result = hmac.update('YYYY').digest('hex')

console.log(result);
<?php
$secret_key = hash('sha256', 'XXXX', true);
$hash = hash_hmac('sha256', 'YYYY', $secret_key);

echo $hash;