以下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中一样重现它?
答案 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;