gpt4 book ai didi

javascript - 预期的MAC与从NodeJS到Go服务器的传入MAC不同

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

我在尝试在NodeJS和Go服务器之间实现HMAC时遇到麻烦。现在,我的Go服务器生成的预期MAC与我的NodeJS服务器生成的实际MAC不同。

// NodeJS generated MAC
const generateMAC = (message, secret) => {
return crypto.createHmac('sha256', secret).update(message).digest('hex');
};

req.headers['blocklist-auth'] = generateMAC(
JSON.stringify(req.body),
secret
);
进行HMAC验证(从NodeJS接收MAC并尝试tp验证)
func generateMAC(message []byte, secret []byte) []byte {
mac := hmac.New(sha256.New, secret)
_, err := mac.Write(message)
if err != nil {
return nil
}
s := mac.Sum(nil)
return s
}

// ValidMAC reports whether messageMAC is a valid HMAC tag for message.
func validMAC(message []byte, messageMAC []byte, secret []byte) bool {
expectedMAC := generateMAC(message, secret)
log.Infof("E: %s -- M: %s", string(expectedMAC), string(messageMAC), )
return hmac.Equal(messageMAC, expectedMAC)
}
调试后,我记录了预期的MAC外观和实际的MAC外观
预期的: n\ufffd\ufffdmi\u0015\ufffd|\ufffdE\ufffd\ufffd>\ufffd\u000e0\u0012C1\ufffd\ufffd\ufffds?!\u001a|\ufffdH<!实际的:
55d31eb5caf5f5046d054fcf39721ba273cd97da66f663f8337e10ac62045197
我注意到预期MAC地址与实际MAC地址之间的长度也有所不同。来自NodeJS的长度是预期MAC的两倍。不知道为什么。
enter image description here

最佳答案

它们似乎产生相同的结果,但是传递给Node代码中的摘要调用的编码是'hex'
如果您在两端以相同的方式对返回值进行编码,则它们应该匹配。

const crypto = require('crypto')
const generateMAC = (message, secret) =>
crypto.createHmac('sha256', secret).update(message).digest('base64')
console.log(generateMAC('foo', 'bar'))
package main

import (
"crypto/hmac"
"crypto/sha256"
"encoding/base64"
"fmt"
)

func generateMAC(message []byte, secret []byte) string {
mac := hmac.New(sha256.New, secret)
_, err := mac.Write(message)
if err != nil {
return "oh no"
}
return base64.StdEncoding.EncodeToString(mac.Sum(nil))
}

func main() {
fmt.Println(generateMAC([]byte("foo"), []byte("bar")))
}
由于它们都编码为base64: FHkzIYqqvAuLEKKzpcNGhMjZQ0G88QpHNtxycPd0GFE=,因此它们都产生相同的输出。
如果未指定编码,则 .digest()默认返回一个Buffer,然后您也可以使用 these encodings之一在单独的 .toString()中使用它。

关于javascript - 预期的MAC与从NodeJS到Go服务器的传入MAC不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65637989/

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