Python 在Go中创建散列

Python 在Go中创建散列,python,go,Python,Go,免责声明:我是新手 我正在尝试将Python函数转换为Go: def verify_signature(self, token, timestamp, signature): return signature == hmac.new(key=self.api_key, msg='{0}{1}'.format(timestamp, token), digestmod=hashlib.sha256).hexdigest() 我认为下面的Go函数几乎是正确的,

免责声明:我是新手

我正在尝试将Python函数转换为Go:

def verify_signature(self, token, timestamp, signature):
    return signature == hmac.new(key=self.api_key,
        msg='{0}{1}'.format(timestamp, token),
        digestmod=hashlib.sha256).hexdigest()
我认为下面的Go函数几乎是正确的,但我不理解Python函数的最后一行“digestmod=hashlib.sha256).hexdigest()”的确切含义:

func verify_signature (api_key, token, timestamp) {
    msg := fmt.Sprintf("%s%s", timestamp, token)
    mac := hmac.New(sha256.New, api_key)
    mac.Write(msg) 
    return mac
}

如果采用不同的格式,代码更容易理解:

def verify_signature(self, token, timestamp, signature):
    mac = hmac.new(
        key=self.api_key,
        msg='{0}{1}'.format(timestamp, token),
        digestmod=hashlib.sha256
    )
    actual = mac.hexdigest()
    return signature == actual
回答您的问题:
hexdigest()
将64字节数组(=对消息应用SHA256的结果)转换为128个字符的十六进制转储,更易于处理(打印/比较)

你的Go代码不能做同样的事情。这只是“创建
实际的
”部分。您缺少“与预期的
签名进行比较”部分。如果预期的
签名
已经是Go中的
[]字节
数组,则可以使用
hmac.Equal()
对其进行检查

注意:通过
mac.Sum(nil)
获得散列值。看


如果不是,那么您应该尝试将
签名中的十六进制转储转换为
[]字节
数组,以便对两者进行比较。

您可以将完整的代码用于复制比较?最后一个函数:您不使用?@BurhanKhalid,无入站解析支持,有什么原因吗