如何使用bloom过滤器的消息摘要获取int类型哈希

问题描述 投票:1回答:1

我正在尝试在Java中实现Bloom过滤器,并且一种哈希类型需要使用消息摘要。在add方法期间,我创建的其他哈希值用于将位集的索引设置为true。我需要使用消息摘要创建哈希以实现相同的目标,但是我找不到返回int的方法。我的添加方法并尝试使用哈希:

public void add(String element) {
    int index = Math.abs(element.hashCode())%size;
    int index1 = myHash(element);

    //  int index2 = mdHash(element);

    b.set(index, true); 
    b.set(index1, true);
}

public int mdHash(String message) throws NoSuchAlgorithmException {
    MessageDigest md = MessageDigest.getInstance("SHA-256");
    md.update(message.getBytes()); 
    byte[] digest = md.digest();       
    return ;
}

如何使用摘要创建哈希,也可以将索引设置为true?

java hash bloom-filter message-digest
1个回答
0
投票

对于Bloom过滤器,通常不需要使用SHA-256:它很慢。相反,我会使用例如杂音哈希。或者只是hashCode(),然后使用another hash生成64哈希。

然后,从该哈希中,您可以根据需要为Bloom过滤器生成许多数字,例如,如下所示(另请参见fastfilter_java project:]

public void add(long key) {
    long hash = Hash.hash64(key, seed);
    long a = (hash >>> 32) | (hash << 32);
    long b = hash;
    for (int i = 0; i < k; i++) {
        data[Hash.reduce((int) (a >>> 32), arraySize)] |= 1L << a;
        a += b;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.