Python 在Go中创建散列
免责声明:我是新手 我正在尝试将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函数几乎是正确的,
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,无入站解析支持,有什么原因吗