2010-07-17 4 views
13

Что такое алгоритм функции хэш-функции Ruby?Какая функция хэша использует Ruby?

+4

Ruby даже не имеет официальной спецификации, поэтому я сомневаюсь, что есть правильный ответ. В любом случае, зачем вам это нужно знать? – polygenelubricants

+5

Хеш-функция чего? Строки? Числа? Объекты? – kennytm

+0

Я думаю, что он имеет в виду что-то вроде этого http://www.ruby-doc.org/core-1.9.3/Bignum.html#method-i-hash – James

ответ

18

Стандартная реализация Рубин использует Murmur hash для некоторых типов (целое число, строка)

От string.c: 1901:

/* 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 имеет отличное распространение, но в то время как это необходимо для криптографического хеширования, это не достаточно. Другими словами, хэш не устойчив к * преднамеренной * подделке. –

Смежные вопросы