首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python中的Murmur Hash 3

python中的Murmur Hash 3
EN

Stack Overflow用户
提问于 2022-02-07 23:07:05
回答 2查看 646关注 0票数 1

我正在尝试在python中实现murmur散列3。我对这个函数mmh3.hash_bytes(key)有混淆。

下面是我尝试过的代码:

代码语言:javascript
运行
复制
a = bitarray()
print(mmh3.hash('A')) # output is 1423767502 a hash value 

接下来,我又尝试了一个函数

代码语言:javascript
运行
复制
print(mmh3.hash_bytes('A')) 
# output is b'z\xb1)\x9a\xb7\xc2_\x037\x99\xddF\x9c\xf2}8'

mmh3.hash_bytes('A')的输出使我感到困惑。这两个函数不应该具有相同的值吗?因为两个哈希值都是'A‘。如果我错了就纠正我。

EN

回答 2

Stack Overflow用户

发布于 2022-02-08 10:57:33

来自在线文件

mmh3.hash("foo") # returns a 32-bit signed int ..。 mmh3.hash_bytes("foo") # 128 bit value as bytes

维基百科说了同样的话:

目前的版本是MurmurHash3,它产生32位或128位的哈希值.

这在C++实现的头文件中也是显式的:

void MurmurHash3_x86_32 ( const void * key, Py_ssize_t len, uint32_t seed, void * out ); void MurmurHash3_x86_128 ( const void * key, Py_ssize_t len, uint32_t seed, void * out );

验证其不同的测试(12)也是一样的:

assert mmh3.hash("foo") == -156908512 ..。 assert mmh3.hash_bytes("foo") == b"aE\xf5\x01W\x86q\xe2\x87}\xba+\xe4\x87\xaf~"

因此,我承认,相同的散列函数返回两个不同的结果是令人惊讶的,但实际上它不是完全相同的散列函数。

票数 0
EN

Stack Overflow用户

发布于 2022-02-08 22:01:42

在现代密码学中,它们不同的原因很简单;域分离使得对MurmurHash (SHA2有它,SHA3派生也有它)的不同大小的调用将输出不同的值。这可能会防止在加密情况下的某些攻击(MurmurHash不是加密散列),或者帮助分散某些攻击中的表.

从散列到椭圆曲线的很好的定义

使用随机预言的密码协议经常被分析。 假设随机先知只回答问题 由协议产生的。实际上,这一假设并没有 如果两个协议查询相同的随机预言,则保持不变。具体而言, 考虑查询随机oracle的协议P1和P2 :如果P1和P2都在相同的值x上查询R,则对一个或 这两种协议都可能无效。 解决这一问题的一种通用方法称为域。 分离,它允许单个随机先知模拟多个独立的先知。这是通过确保每个 模拟甲骨文所看到的查询与 所有其他模拟的先知。例如,要模拟给定单个甲骨文R的两个先知R1和R2,一个可以定义 R1(x) := R("R1“= x) R2(x) := R("R2”= x) 在本例中,"R1“和"R2”称为域分离标记; 它们确保对R1和R2的查询不会导致相同的结果。 因此,将R1和R2视为独立的查询是安全的。 神谕。

如果我们查看来自维基百科的代码示例,我们将看到这一行;

hash ← hash XOR len

也就是说,所需的长度(len)被合并到MurmurHash中,这样值就会改变,而不是简单地截断128位的输出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71026560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档