2010-07-17 4 views
13

Ruby의 해시 함수 알고리즘이란 무엇입니까? 1901 :Ruby는 어떤 해시 함수를 사용합니까?

+4

Ruby에는 공식 사양이 없기 때문에 올바른 답변이 정확한지 의심 스럽습니다. 어쨌든 왜 이것을 알아야합니까? – polygenelubricants

+5

무엇의 해시 기능? 문자열? 번호? 사물? – kennytm

+0

나는 그가 다음과 같은 것을 의미한다고 생각한다. http://www.ruby-doc.org/core-1.9.3/Bignum.html#method-i-hash – James

답변

18

는 표준 루비 구현은 일부 유형 (정수, 문자열) string.c에서

에 대한 Murmur hash를 사용

/* MurmurHash described in http://murmurhash.googlepages.com/ */ 
static unsigned int 
hash(const unsigned char * data, int len, unsigned int h) 

(이 기능은에 st_hash로 이름이 변경 될 것으로 보인다 있습니다 SVN 트렁크)

소스 코드에서 rb_memhash을 검색하면 어디서 사용되는지 알 수 있습니다. 이전에 자체 프로젝트에서 Murmur2 해시를 사용했지만, 매우 빠르며 우수한 암호화 속성을 가지고 있습니다 (그러나 암호화 해시 함수로 사용하기에 충분하지 않습니다).

+3

Murmur2는 훌륭한 분포를 가지고 있지만, 암호화 해싱에 필요하지만, 충분치 않은. 즉, 해시가 의도적 인 조작에 저항하지 않습니다. –

관련 문제