tags:

views:

102

answers:

1

What is Ruby's hash function algorithm?

+6  A: 

The standard Ruby implementation uses the Murmur hash for some types (integer, string)

From string.c:1901:

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

(note that this function seems to be renamed to st_hash in the SVN trunk)

Search for rb_memhash in the source code if you want to know where it gets used. I have used the Murmur2 hash in an own project before, it is very fast and has good cryptographic properties (but not good enough to be used as cryptographic hash function).

AndiDog
Murmur2 has excellent distribution, but while that's necessary for cryptographic hashing, it's not sufficient. In other words, the hash is not resistant to *intentional* tampering.
Steven Sudit