在Bloom过滤器中使用散列函数

时间:2010-05-02 12:41:38

标签: hash bloom-filter

布隆过滤器使用散列函数(或许多)在给定输入字符串X的情况下生成介于0和m之间的值。我的问题是如何使用散列函数以这种方式生成值,例如MD5 hash通常由32个长度hex字符串表示,我如何使用MD5哈希算法生成0到m之间的值,我可以指定m?我现在正在使用Java,所以使用它提供的MessageDigest功能这样做的例子会很棒,尽管只是对如何处理它的一般描述也会很好。

由于

2 个答案:

答案 0 :(得分:4)

您应首先将哈希输出转换为无符号整数,然后将其模数 m 减少。这看起来像这样:

MessageDigest md = MessageDigest.getInstance("MD5");
// hash data...
byte[] hashValue = md.digest();
BigInteger n = new BigInteger(1, hashValue);
n = n.mod(m);
// at that point, n has a value between 0 and m-1 (inclusive)

我假设 m BigInteger个实例。如有必要,请使用BigInteger.valueOf()。同样,使用n.intValue()n.longValue() n 的值作为Java的基本类型之一。

模块化减少有些偏差,但如果 m 远小于 2 ^ 128 ,偏差非常小。

答案 1 :(得分:0)

最简单的方法可能是将哈希输出(作为字节序列)转换为单个二进制数并取模数。