2010-04-24 65 views
6

我期待着取一个散列范围(md5或sha1)并将其分成n个相等的范围。例如,如果m(num个节点)= 5,则整个哈希范围将被5分割,以便将存在关键范围的均匀分布。我希望n = 1(节点1)从哈希范围的开始到1/5,2从1/5到2/5等等,直到最后。将整个散列范围拆分为n个相等的范围

基本上,我需要将键范围映射到每个n,这样当我散列一个值时,它就知道哪个n将会处理该范围。

我是哈希算法的新手,有点不确定我可以从哪里开始解决这个项目。你可以给的任何帮助都会很棒。

+0

它混淆你如何利用N既是范围的数量分成,并作为其中的一个索引n部分。 – Joren 2010-04-24 20:42:09

+0

这整个问题令人困惑,我猜测你无论做什么,都是不可能的,因为密码散列函数实际上是不可逆的。 – 2010-04-24 20:46:26

+0

我改变了一些问题,修正了n的模糊用法并试图解释更多一点。 – noxtion 2010-04-24 21:48:03

回答

1

如果你可以忍受一点点很难去除偏差(任何两个幂都不可能在5中均匀分配,所以必须有一些偏差),然后模(% C和其他许多C-像语法)是将整个范围划分为5个几乎相同大小的分区的方式。

任何消息mmd5(m)%5==0是在第一分区等

0

如果你正在寻找一个散列值放入一些“桶”的均匀,然后一些简单的数学会做的伎俩。小心四舍五入的边缘情况......你最好使用2的幂作为BUCKETS值。

这是Python代码,顺便说一下,它支持大的整数...

BUCKETS = 5 
BITS  = 160 

BUCKETSIZE = 2**BITS/BUCKETS 

int('ad01c5b3de58a02a42367e33f5bdb182d5e7e164', 16)/BUCKETSIZE == 3 
int('553ae7da92f5505a92bbb8c9d47be76ab9f65bc2', 16)/BUCKETSIZE == 1 
int('001c7c8c5ff152f1cc8ed30421e02a898cfcfb23', 16)/BUCKETSIZE == 0