2010-07-17 82 views
13

什麼是Ruby的散列函數算法?Ruby使用什麼哈希函數?

+4

Ruby甚至沒有官方的規範,所以我懷疑是否有正確的答案。無論如何,你爲什麼需要知道這個? – polygenelubricants 2010-07-17 08:33:01

+5

哈希函數是什麼?字符串?數字?對象? – kennytm 2010-07-17 08:38:04

+0

我想他的意思是這樣的http://www.ruby-doc.org/core-1.9.3/Bignum.html#method-i-hash – James 2012-09-09 16:33:38

回答

18

標準Ruby實現使用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具有優良的分佈,但同時,對於密碼散列有必要,它是不夠。換句話說,哈希不能抵抗*故意*篡改。 – 2010-08-12 01:51:39