我在尝试在我的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
);
Go HMAC Validation(从 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之间的长度也不同。来自NodeJS的长度是预期MAC的两倍。不知道为什么会这样。
MM们
相关分类