2010-05-02 6 views
2

블룸 필터는 해시 함수 (또는 다수)를 사용하여 입력 문자열 X가 주어진 경우 0과 m 사이의 값을 생성합니다.이 질문에 해시 함수를 사용하여 MD5 해시는 일반적으로 32 자 길이의 hex 문자열로 표현됩니다. MD5 해시 알고리즘을 사용하여 0과 m 사이의 값을 생성하는 방법은 무엇입니까? 여기서 m은 지정할 수 있습니까? 저는 Java를 사용하고 있습니다. 따라서 MessageDigest가 제공하는 MessageDigest 기능을 사용하여 예제를 작성하는 것이 좋을 것입니다.블룸 필터로 해쉬 함수 사용하기

감사

+3

일반적으로 속도를 위해 블룸 필터 또는 해시 테이블을 구현합니다. MD5는 충돌 방지 및 암호화 보안을 목표로하므로 다른 기능에 비해 매우 느립니다. 사용할 다른 함수를 찾아야합니다. (해시 함수에 관계없이 아래의 해답을 적용하십시오) – Slartibartfast

답변

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) 

내가 mBigInteger 예라고 가정했다. 필요한 경우 BigInteger.valueOf()을 사용하십시오. 마찬가지로 n.intValue() 또는 n.longValue()을 사용하여 n의 값을 Java의 기본 유형 중 하나로 가져옵니다.

모듈러 감소

다소 편향된이지만 m 실질적 미만 2^128 경우 바이어스는 매우 작다.

+0

답변 주셔서 감사합니다 :) – dangerstat

0

가장 간단한 방법은 아마 하나의 진수를 (바이트 순서로) 해시 출력을 변환하는 모듈로 m을하는 것입니다.

+1

안녕하세요, 답장을 보내 주시면 "해시 출력을 바이트 시퀀스로 변환하여 단일 이진수 "감사 : D – dangerstat

관련 문제