2010-07-17 25 views
13

¿Qué es el algoritmo de función hash de Ruby?¿Qué función hash usa Ruby?

+4

Ruby ni siquiera tiene una especificación oficial, por lo que dudo que haya una respuesta correcta. En cualquier caso, ¿por qué necesitas saber esto? – polygenelubricants

+5

Función hash de qué? ¿Instrumentos de cuerda? ¿Números? ¿Objetos? – kennytm

+0

Creo que se refiere a algo como esto http://www.ruby-doc.org/core-1.9.3/Bignum.html#method-i-hash – James

Respuesta

18

La implementación estándar de Ruby utiliza el Murmur hash para algunos tipos (entero, cadena)

De string.c: 1901:

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

(tenga en cuenta que esta función parece ser renombrado a st_hash en el Troncal SVN)

Busque rb_memhash en el código fuente si desea saber dónde se usa. He utilizado el hash Murmur2 en un proyecto propio anteriormente, es muy rápido y tiene buenas propiedades criptográficas (pero no lo suficientemente bueno para ser utilizado como función hash criptográfica).

+3

Murmur2 tiene una distribución excelente, pero si bien es necesario para el hash criptográfico, es insuficiente. En otras palabras, el hash no es resistente a la * manipulación intencional *. –