我们有两个不同的库,一个是Python,一个是Go,需要以相同的方式计算murmur3哈希。不幸的是,无论我们如何努力,都无法让这些库产生相同的结果。从这个关于Java和Python的SO问题中可以看出,兼容性并不一定是直截了当的。
现在我们正在使用python mmh3和Go github.com/spaolacci/murmur3库。
在Go中:
在Go语言中,
我们可以使用不同的库,但是我们想知道从字符串计算base64编码哈希值时,我们的Go或Python方法是否存在问题。感谢任何帮助。
现在我们正在使用python mmh3和Go github.com/spaolacci/murmur3库。
在Go中:
hash := murmur3.New128()
hash.Write([]byte("chocolate-covered-espresso-beans"))
fmt.Println(base64.RawURLEncoding.EncodeToString(hash.Sum(nil)))
// Output: cLHSo2nCBxyOezviLM5gwg
在Python中:
name = "chocolate-covered-espresso-beans"
hash = mmh3.hash128(name.encode('utf-8'), signed=False).to_bytes(16, byteorder='big', signed=False)
print(base64.urlsafe_b64encode(hash).decode('utf-8').strip("="))
# Output: jns74izOYMJwsdKjacIHHA (big byteorder)
hash = mmh3.hash128(name.encode('utf-8'), signed=False).to_bytes(16, byteorder='little', signed=False)
print(base64.urlsafe_b64encode(hash).decode('utf-8').strip("="))
# Output: HAfCaaPSsXDCYM4s4jt7jg (little byteorder)
hash = mmh3.hash_bytes(name.encode('utf-8'))
print(base64.urlsafe_b64encode(hash).decode('utf-8').strip("="))
# Output: HAfCaaPSsXDCYM4s4jt7jg
在Go语言中,
murmur3
返回一个 uint64
,因此我们假设在Python中 signed=False
;然而我们也尝试过 signed=True
,但并未获得匹配的哈希值。我们可以使用不同的库,但是我们想知道从字符串计算base64编码哈希值时,我们的Go或Python方法是否存在问题。感谢任何帮助。