添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

加密哈希和非加密哈希-MM是非加密哈希

首先了解下加密哈希和非加密哈希,

加密哈希函数旨在保证安全性,很难找到碰撞。即:给定的散列h很难找到的消息m;很难找到产生相同的哈希值的消息m1和m2。

非加密哈希函数只是试图避免非恶意输入的冲突。作为较弱担保的交换,它们通常更快。如果数据量小,或者不太在意哈希碰撞的频率,甚至可以选择生成哈希值小的哈希算法,占用更小的空间。

Smhasher-评价哈希算法的函数

评价一个哈希算法的好坏,人们通常会引用 SMHasher 测试集的运行结果。
Smhasher 测试Hash函数的功能,测试包括以下几个方面:

  1. Sanity 是不是可以使用的
  2. Performance 完成一个散列需要多长时间
  3. Differentials 产生相同哈希的概率,可能导致相同的的最小差异
  4. Keysets 分布均匀程度
    一系列的测试方式具体可参考:https://github.com/aappleby/smhasher/wiki/SMHasher

MurmurHash

MurmurHash是一种经过广泛测试且速度很快的非加密哈希函数。它有Austin Appleby于2008年创建,并存在多种变体,名字来自两个基本运算,即multiply和rotate(尽管该算法实际上使用shift和xor而不是rotate)。

MurmurHash3可以产生32位或128位哈希,旧版本MurmurHash2产生32位或64位值,MurmurHash2A变体添加了Merkel-Damgard构造,以便可以逐步调用它。MurmurHash64A针对64位处理器进行了优化,针对32位处理器进行MurmurHash64B优化

MurmurHash2-160生成160位哈希,而MurmurHash1已过时,实现规范的实现是用C++实现的,但是有多种流行语言的有效移植,已被很多开源项目采用。

具有良好的分布性,适用于机器学习用例,例如特征哈希和随机投影,布隆过滤器中也有应用。
MurMurHash3 128 位版本的速度是 MD5 的十倍。MurMurHash3 生成 32 位哈希的用时比生成 128 位哈希的用时要长。原因在于生成 128 位哈希的实现受益于现代处理器的特性。32 位哈希值发生碰撞的可能性就比 128 位的要高得多,当数据量达到十万时,就很有可能发生碰撞。

MM通过了卡方检验和雪崩测试

Avalanche Test(雪崩测试)
这意味着输入的微小变化会导致输出发生显著变化,使其统计上看起来与随机变化没有差别。例如:MurmurHash3(“abd”,123)=454173339;MurmurHash3(“abe”,123)=4085872068

Chi-Squared Test(卡方检验)
均匀性:一般期望设计的哈希函数的哈希值均匀落入哈希空间。将哈希空间 n 等分, 得到 p个 哈希值, 那么平均落入每个哈希子空间的哈希值是 𝑓_0= p /n, 落入第 i个子空间的哈希值个数是𝑓_𝑖 。统计量 x^2表示𝑓_𝑖到均匀分布的偏离度。哈希函数均匀性可用卡方拟合优度检验来判断。

Murmur Hash3——实现

MurmurHash:名字由两个运算得来 “multiply” “rotate”。
算法的流程如下:
使用模拟退火算法求出了最合适的参数,“c1=0xcc9e2d51” “c2=0x1b873593” “m=0x5” “n=0xe6546b64” “Hash=seed”
在这里插入图片描述
假设MurmurHash3(“abcde”,123)
1.
abcd变成16进制并分别左移(留下e)
0x61→0x61000000 (左移24位)
0x62→0x00620000 (左移16位)
0x63→0x00006300 (左移8位)
0x64→0x00000064
2.
相加,赋值给k
K = 0x61626364
在这里插入图片描述
3.
对k,Hash进行操作。(初始哈希值是一个随机数)。
k=k c1
k=“rotate” k by 15
k=k
c2
Hash=Hash xor k

Hash=“rotate” k by 13
Hash=Hash*m+n
在这里插入图片描述
4.
处理tail(remaining bytes)
先左移后运算···
得到:Hash=Hash xor k
在这里插入图片描述
5.
Hash=Hash xor “block’s length”

Hash=Avalanche(Hash)

Output(Hash)
在这里插入图片描述

Murmur Hash3 or CityHash

CityHash是Google发布的字符串散列算法,和murmurhash一样,属于非加密型hash算法。CityHash算法的开发是受到MurmurHash的启发。优点是大部分步骤包含了至少两步独立的数学运算。缺点是代码较同类流行算法复杂。 Google 希望为速度而不是为了简单而优化,因此没有照顾较短输入的特例 。

https://github.com/hajimes/mmh3
pip install murmurhash3

import mmh3
mmh3.hash(‘foo’) # 32-bit signed int
-156908512

加密哈希和非加密哈希-MM是非加密哈希首先了解下加密哈希和非加密哈希,加密哈希函数旨在保证安全性,很难找到碰撞。即:给定的散列h很难找到的消息m;很难找到产生相同的哈希值的消息m1和m2。非加密哈希函数只是试图避免非恶意输入的冲突。作为较弱担保的交换,它们通常更快。如果数据量小,或者不太在意哈希碰撞的频率,甚至可以选择生成哈希值小的哈希算法,占用更小的空间。Smhasher-评价哈希算法的... > const murmur Hash 3 = require ( ' murmur hash 3.js' ) ; // Return a 32bit hash as an unsigned integer: > murmur Hash 3 . x86 . hash 32 ( "I will not buy this record, it is scratched." ) ; 2832214938 // Return a 128bit hash as a hexadecimal string: > murmur Hash 3 . x86 . hash 128 ( "I will not buy this tobacconist's, it is scratched." ) ; '9b5b7ba2ef3f7866889adeaf00f3f9
Murmur Hash 哈希算法是一种高效、简单的哈希算法,主要应用于散列表的实现。它通过对输入的数据进行多次运算,得到一个固定长度的散列值。 Murmur Hash 3 第三版哈希算法是 Murmur Hash 的升级版本,与原版本相比,具有更高的散列精度和更优秀的碰撞处理能力。同时,它还支持 128 位散列值,可以更好地防止碰撞。
Murmur 哈希是一种非加密函数的哈希函数,下面我们在 介绍 哈希函数之前我们需要了解一下什么是好的哈希函数。 1.好的哈希函数应该卡方测试(chi-squared test) 卡方测试: Xc2=∑i=0N−1(Oi−Ei)2/Ei,其中Oi为观察量,而Ei为估计量{X_c^2 = \sum_ {i=0}^{N-1}(O_i-E_i)^2/E_i},其中O_i为观察量,而E_i为估计量Xc2​=∑i=0N−1​(Oi​−Ei​)2/Ei​,其中Oi​为观察量,而Ei​为估计量 我们测试的方案就是给出大量的数据
Murmur Hash 算法:高运算性能,低碰撞率,由Austin Appleby创建于2008年,现已应用到Hadoop、libstdc++、nginx、libmemcached等开源系统。2011年Appleby被Google雇佣,随后Google推出其变种的City Hash 算法。 官方网站:https://sites.google.com/site/ murmur hash / Murmu...
文章目录 Murmur Hash Murmur Hash 通过了【卡方检验】和【雪崩测试】什么是卡方检验?什么是雪崩测试?各类 Hash 算法碰撞概率 Murmur Hash 3 在Scala的使用 本文内容收集于互联网。 Murmur Hash 是一种 非加密 函数的哈希函数。 * Murmur Hash 3_最 详细 介绍 Murmur Hash 3原理讲解 Murmur Hash Murmur Hash 是一种经过广泛测试且速度很快的非加密哈希函数。它有Austin Appleby于2008年创建,并存在多种变体,名字来自
1.数据库中索引概念 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。 2.索引优点和缺点 索引可以避免全表扫描,加快查询速度。多数查询可以仅扫描少量索引页及数据页,而不是遍历所有...
由于项目中有报文排重需求,所以会将报文字符串作为分布式锁key。考虑到报文不定长并且散列性不太好,如其作为锁key,特别是当key值过大时,使用redis进行读写都会有相对的性能下降。 参考文献里测试对比: 长度为10:写平均耗时0.053ms,读0.040ms 长度为20000:写平均耗时0.352ms,读0.084ms 一种简单的方案是对报文进...
mmh3是的Python包装器, 是Austin Appleby发明的一组快速而强大的非加密哈希函数。 结合使用, 和等概率技术,mmh3允许您在数据挖掘,机器学习和自然语言处理等领域开发高性能系统。 pip install mmh3 # for macOS, use "pip3 install mmh3" and python3 快速开始: >>> import mmh3 >>> mmh3. hash ( " foo " ) # returns a 32-bit signed int -156908512 >>> mmh3. hash ( " foo " , 42) # uses 42 as a seed -1322301282 >>> mmh3. hash ( " foo " , signed=False) # returns a 32-bit unsigned
看Jedis的主键分区哈希时,看到了名字很萌很陌陌的 Murmur Hash ,谷歌一看才发现Redis,Memcached,Cassandra,HBase,Lucene都用它。 关于 Hash ,我之前只知道MD5,SHA1,SHA256还有Java自己的 hash Code(),学校里怎么没教 Murmur Hash 啊? 哦,原来这算法是2008年才被发明的,与MD5这些讲究安全性的摘要算法比,Redis