gpt4 book ai didi

javascript - 为什么我的 crypto.createHmac() 会为相同的输入生成不同的 HMAC?

转载 作者:行者123 更新时间:2023-11-30 06:24:29 30 4
gpt4 key购买 nike

我正在尝试将 Node.js 中的 HMAC 与 PHP 中的 HMAC 匹配以进行 API 授权。问题出在 Node.js 中,createHmac() 函数为相同的输入生成不同的 HMAC,因此与 PHP 中的 HMAC 不匹配。

这是我的 JS 代码:

events: {
proxyReq: (proxyReq, req) => {
const API_KEY = 125;
const API_SECRET_KEY = 'abc';

let hmac = crypto.createHmac('sha512', API_SECRET_KEY);
hmac.update('0');
const s = hmac.digest('base64');

proxyReq.setHeader('x-api-key', API_KEY);
proxyReq.setHeader('x-api-signature', s);
proxyReq.setHeader('x-api-date', date);
},

PHP:

$API_SECRET_KEY = 'abc';
$client_signature = $request->header('x-api-signature');
$hmac = base64_encode(hash_hmac('sha512', '0', base64_decode($API_SECRET_KEY), true));

Log::error($client_signature);
Log::error($hmac);

最新输出:

[2018-07-11 15:25:28] local.ERROR: dO50o/LcS0/UOXOu/5lHbOMXLe+l225vUU13fWEHeOoUHV7SlcSOE9rQq2UhTlys5N6C4hkq8QTALnpRehtlCg==  
[2018-07-11 15:25:28] local.ERROR: 7W2U/3uEKIMD0s39jmZLlJItwTcSSDQdW7WTYdslvIjuUeGydyqwwAuZzaMP0Do5v1zRJxmPITFdy4EHTY5r6A==

[2018-07-11 15:25:33] local.ERROR: UYsXZFyoAB2zELZzwjWyktPEHlYqIP3cgLeb/LXK0X8pnkVxiqEaFWK7c1YIWd6hFPpZHn5j1YdbDhpAL7hQ5A==
[2018-07-11 15:25:33] local.ERROR: 7W2U/3uEKIMD0s39jmZLlJItwTcSSDQdW7WTYdslvIjuUeGydyqwwAuZzaMP0Do5v1zRJxmPITFdy4EHTY5r6A==

任何替代方案或解决方案将不胜感激!

最佳答案

如果您将 PHP 中的操作与 base64_decode 相匹配,您将获得正确的值:

const crypto = require('crypto');
const API_SECRET_KEY = Buffer.from('abc', 'base64');

let hmac = crypto.createHmac('sha512', API_SECRET_KEY);
hmac.update('0');
const s = hmac.digest('base64');
console.log(s);

7W2U/3uEKIMD0s39jmZLlJItwTcSSDQdW7WTYdslvIjuUeGydyqwwAuZzaMP0Do5v1zRJxmPITFdy4EHTY5r6A==

https://repl.it/repls/BouncyBogusGigabyte

检查您确实拥有正确的常量 API_SECRET_KEY 值、正确的数据输入值(在本例中为“0”),并且您正在查看 PHP 代码中的正确请求。如果您提供相同的输入,两个库都会为您提供相同的输出值。

关于javascript - 为什么我的 crypto.createHmac() 会为相同的输入生成不同的 HMAC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51288956/

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