返回顶部
首页 > 资讯 > 后端开发 > Python >Go 和 Python 之间的 Murmur3 哈希兼容性
  • 464
分享到

Go 和 Python 之间的 Murmur3 哈希兼容性

2024-02-09 13:02:03 464人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

PHP小编子墨为您介绍Go和python之间的Murmur3哈希兼容性。Murmur3是一种高效的哈希算法,常用于数据结构和算法中的散列操作。在Go和Python这两种编程语言中,Mu

PHP小编子墨为您介绍Gopython之间的Murmur3哈希兼容性。Murmur3是一种高效的哈希算法,常用于数据结构和算法中的散列操作。在Go和Python这两种编程语言中,Murmur3哈希算法的实现方式有所不同,因此在使用时可能会出现兼容性问题。本文将详细介绍Go和Python中Murmur3哈希算法的差异,并提供解决方案,以确保在不同语言之间的数据传递中保持正确的哈希兼容性。

问题内容

我们有两个不同的库,一个在 python 中,一个在 go 中,需要以相同的方式计算 murmur3 哈希值。不幸的是,无论我们如何努力,我们都无法让库产生相同的结果。从这个关于 java 和 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 方法是否存在问题。任何帮助表示赞赏。

解决方法

第一个 python 结果几乎是正确的。

>>> binascii.hexlify(base64.b64decode('jns74izoymjwsdkjacihha=='))
b'8e7b3be22cce60c270b1d2a369c2071c'

在 go 中:

    x, y := murmur3.sum128([]byte("chocolate-covered-espresso-beans"))
    fmt.printf("%x %x\n", x, y)

结果:

70b1d2a369c2071c 8e7b3be22cce60c2

所以这两个词的顺序颠倒了。要在 python 中获得相同的结果,您可以尝试以下操作:

name = "chocolate-covered-espresso-beans"
hash = mmh3.hash128(name.encode('utf-8'), signed=False).to_bytes(16, byteorder='big', signed=False)
hash = hash[8:] + hash[:8]
print(base64.urlsafe_b64encode(hash).decode('utf-8').strip("="))
# cLHSo2nCBxyOezviLM5gwg

以上就是Go 和 Python 之间的 Murmur3 哈希兼容性的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: Go 和 Python 之间的 Murmur3 哈希兼容性

本文链接: https://lsjlt.com/news/562574.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Go 和 Python 之间的 Murmur3 哈希兼容性
    php小编子墨为您介绍Go和Python之间的Murmur3哈希兼容性。Murmur3是一种高效的哈希算法,常用于数据结构和算法中的散列操作。在Go和Python这两种编程语言中,Mu...
    99+
    2024-02-09
  • Python 与 Jython:性能、兼容性和应用的较量
    Python 是一种解释型语言,而 Jython 是 Python 的实现,运行在 Java 虚拟机 (JVM) 上。解释型语言通常比编译型语言执行得慢,因为解释器需要在运行时将代码转换成机器指令。然而,JVM 的即时 (JIT) 编译器...
    99+
    2024-03-15
    Jython
  • shell数据类型和go语言的兼容性如何?
    Shell脚本是一种在Unix和类Unix操作系统上执行命令的脚本语言。它是一种非常灵活的编程语言,可以用于自动化许多任务,包括文本处理、系统管理、网络管理等等。而Go语言是一种由Google开发的编程语言,它被设计用来解决现代软件开发中的...
    99+
    2023-06-24
    load shell 数据类型
  • Python升级和兼容性配置是怎样的
    Python升级和兼容性配置是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Python里面有个现象很奇怪,一般要学习Python都会纠结是学习2和3,这个差别和纠结Ja...
    99+
    2023-06-04
  • ASP对象与UNIX系统之间的兼容性问题如何解决?
    随着互联网的快速发展,越来越多的企业和个人开始使用ASP(Active Server Pages)技术来构建网站和Web应用程序。ASP是一种服务器端脚本语言,可以将HTML页面与服务器端脚本代码进行混合,从而实现动态网站开发。然而,AS...
    99+
    2023-07-27
    对象 unix http
  • ASP、Linux、自然语言处理和Apache,如何处理它们之间的兼容性问题?
    随着互联网技术的不断发展,各种不同的技术和平台之间的兼容性问题也越来越成为人们关注的焦点。在本文中,我们将探讨ASP、Linux、自然语言处理和Apache之间的兼容性问题,并介绍如何解决这些问题。 ASP和Linux的兼容性问题 ASP...
    99+
    2023-09-07
    linux 自然语言处理 apache
  • Node.js 和 Sails.js 的兼容性之旅:实现Web开发的无限可能
    Node.js 和 Sails.js 的结合是Web开发领域的一大福音,Node.js 是一个基于事件驱动的JavaScript运行时环境,以其轻量级、高性能和可扩展性而著称。Sails.js 是一个基于Node.js的MVC框架,它提...
    99+
    2024-02-26
    Node.js、Sails.js、Web开发、MVC、ORM
  • Go与Rust之间的垃圾回收性能和类别
    小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《Go与Rust之间的垃圾回收性能和类别》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点...
    99+
    2024-04-04
  • Python字典和列表性能之间的比较
    Python列表和字典 前面我们了解了 “大O表示法” 以及对不同的算法的评估,下面来讨论下 Python 两种内置数据类型有关的各种操作的大O数量级:列表 list 和字...
    99+
    2024-04-02
  • Python 编程和 Unix 容器之间的联系是什么?
    Python 编程和 Unix 容器是两个非常流行的领域。Python 编程语言是一种高级编程语言,用于开发各种类型的应用程序,而 Unix 容器则是一种虚拟化技术,用于在单个主机上运行多个应用程序。 尽管 Python 编程和 Unix...
    99+
    2023-06-15
    编程算法 unix 容器
  • C#,Java和Python之间的性能有哪些区别
    本篇内容主要讲解“C#,Java和Python之间的性能有哪些区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#,Java和Python之间的性能有哪些区别”吧!本实验我决定使用所有三种语言...
    99+
    2023-06-16
  • 你知道吗?Python并发、API和容器之间有着神秘的联系!
    Python作为一种高级编程语言,已经成为了许多开发者和数据科学家的首选工具。Python的优点在于它的可读性、易用性和强大的库支持,这些都让开发过程变得更加高效和简单。但是,Python的并发、API和容器之间的联系却很少被人提及。本文将...
    99+
    2023-11-15
    并发 api 容器
  • 了解如何使用容器在Go、Laravel和NumPy之间进行数据交换的最佳实践?
    引言: 在软件开发中,数据交换一直是一个非常重要的话题。在不同的编程语言和框架之间进行数据交换,往往需要花费大量的精力和时间。但是,使用容器可以大大简化数据交换的过程,使得不同的编程语言和框架之间的数据交换变得更加容易。本文将介绍如何使用容...
    99+
    2023-08-23
    laravel 容器 numpy
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作