【发布时间】:2011-06-24 21:56:17
【问题描述】:
我正在使用 MD5 算法对磁盘上的哈希表的密钥进行哈希处理(我知道这是否是用于此目的的最佳算法值得怀疑,但我现在就使用它。问题是可推广到任何产生字节数组的算法)。我的问题是这样的:
哈希码的大小决定了哈希表中组合(桶)的数量。由于 MD5 是 128 位的,因此有大量的组合(~ 3.4e38),这对我的目的来说太大了。所以我想做的是挑选 MD5 生成的字节数组的前 n 位,并将它们转换为长(或 ulong)值。由于 MD5 产生一个字节数组,如果我想要整数个字节,这很容易做到,但这会导致组合数量的跳跃太大。我发现单比特版本要复杂得多。
目标:
n = 10 // I.e. I want 2^10 combinations
long pos = someFcn(byte[] key, n)
其中 key 是被散列的值,n 是我想要使用的 MD5 结果的位数。那么,Pos 将是一个从 0 到 1023 的整数(在 n = 10 的情况下)。如果 n = 11,代码将从 0 到 2^11-1 = 2027 等。必须有点快/高效。
似乎并不难,但它让我望而却步。任何帮助将非常感激。谢谢。
【问题讨论】:
-
您需要在这里进行一些位移。不过,我不知道 C# 语法。