2012-11-10 1 views
3

문자열을 허용하고 64 비트 부호있는 정수 값을 반환하는 해시 알고리즘을 사용하여 살펴 봅니다.잡음이 적거나 64 비트 int를 원한다면 MD5 해시에서 64 비트를 가져 오는 것보다 충돌이 적습니까?

암호화 된 사운드 일 필요는 없지만 분산 저장 장치의 키로 사용하려면 적절한 충돌 속도를 제공하십시오.

내가 법안에 맞는 것 같다 중얼 거림 해시 찾고 있어요 : 이것의 특성은 MD5 해시처럼 뭔가의 최초의 64 비트를 가지고 비교하는 방법 https://sites.google.com/site/murmurhash/

호기심.

감사합니다.

+1

아마도 거의 동일합니다 (즉, 해시 문자열 수가 2^32에 도달 할 때까지 우발적 충돌 가능성이 적음). 그러나 실제로 AFAIK가 절단 된 MD5와 Murmur 3 모두 합리적으로 잘 분산되어 있다는 사실을 뒷받침할만한 학술 논문이 없습니다. –

+0

Murmur는 해시 테이블 용도로 더 빠르고 더 빠를 것입니다. –

+0

java7은 Murmur 해시 코드를'HashMap'의'String'에 사용할 수 있습니다. 그것은 2 개의 hashCode 함수를 가지고 있는데, 하나의 문서'hashCode()'와 murmur -'hash32()'는 private 및 캐쉬 된 패키지이다. 보통'hashCode()'와 같다. impl을 명심하십시오. 일반 hashCode()와 달리 불안정합니다 – bestsss

답변

2

안전한 해시 - 이론적으로 MD5와 같은 '깨진'해시 - 임의성과 구별 할 수없는 배포를 표시합니다 (그렇지 않으면 보안되지 않습니다). 따라서, 그들은 가능한 한 완벽에 가깝습니다.

모든 범용 해시 함수와 마찬가지로 murmurhash는 속도에 대한 정확성을 상실합니다. 대부분의 입력에 대해 매우 좋은 분배 특성을 보여 주지만 반복 된 4 바이트 시퀀스가 ​​원하는 것보다 자주 충돌을 일으키는 자체 병적 인 경우가 있습니다 (예 : documented here).

간략한 설명 : 보안 해시 기능을 사용하면 결코 해를 끼치 지 않으며 일반적으로 범용 해시를 사용하는 것보다 낫습니다. 그러나 또한 상당히 느려질 것입니다.

+0

충돌이 murmur3에 적절한 시드 값에 적용되는지 확실하지 않습니다. (murmur2는 지금 사용하지 않아야합니다) – bestsss

관련 문제