2009-03-24 6 views
3

나는 Park-Miller-Carta LCG 또는 a와 같은 prng를 시드하기 위해 출력을 사용하는 목적으로 utf8 문자열의 다이제스트로 31/32 비트 부호있는/부호없는 정수를 생성하는 해시 알고리즘을 찾고 있습니다. 메르 센 - 트위스터.문자열로 prng를 시드하기위한 좋은 해싱 알고리즘은 무엇입니까?

FNV1과 FNV1a를 살펴 보았지만 비슷한 문자가 마지막 문자와 다른 매우 가까운 값을 제공합니다. 내가 입력 문자열에 최소한의 수정시 근본적으로 변경 낮은 충돌 해시 싶습니다. 성능은 문제가되지 않습니다.

a = 524287; 
for (i = 0; i < n; i ++) 
a = (a * string.charCodeAt (i) * 16807 + 524287) % 2147483647; 

이 나를 더 나은 대안으로 알려 주시기 바랍니다 :

내 현재의 접근 방식은 문자 코드와 멀티 플라이어와 같은 소수를 사용하는 더러운 LCG에있다.

답변

1

32 비트 값을 생성하는 경우 기존 CRC32 사용을 고려하십시오. FNV는 CRC에 대한 빠른 대안으로 고집되고 있으며, 성능은 문제가되지 않는다고 말하고 있습니다.

3

사용 SHA-2

그것은 거기에 최고/최신 해싱 알고리즘입니다. 항상 표준 알고리즘을 사용하는 것이 좋습니다.

1

암호 학적으로 강력한 해시는 원하는 속성을 갖지만 더 많은 비트를 생성하지만 결과를 32 비트로 간단하게 잘라내는 것이 좋습니다. MD5와 같은 결함있는 (그러나 널리 사용되는) 해시 스키마가 적합 할 수 있도록 암호화 강도가 실제 요구 사항이 아니라고 생각합니다. 많은 라이브러리에서 쉽게 사용할 수 있습니다.