2010-07-17 10 views
13

Qual è l'algoritmo della funzione hash di Ruby?Quale funzione di hash utilizza Ruby?

+4

Ruby non ha nemmeno una specifica ufficiale, quindi dubito che ci sia una risposta corretta. In ogni caso, perché hai bisogno di sapere questo? – polygenelubricants

+5

Funzione hash di cosa? Stringhe? Numeri? Oggetti? – kennytm

+0

Penso che voglia dire qualcosa del genere http://www.ruby-doc.org/core-1.9.3/Bignum.html#method-i-hash – James

risposta

18

L'implementazione standard di Ruby utilizza il Murmur hash per alcuni tipi (integer, string)

Da string.c: 1901:

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

(notare che questa funzione sembra essere rinominato st_hash nel Tronco SVN)

Cercare il codice rb_memhash nel codice sorgente se si desidera sapere dove viene utilizzato. Ho usato l'hash di Murmur2 in un progetto precedente, è molto veloce e ha buone proprietà crittografiche (ma non abbastanza per essere usato come funzione di hash crittografica).

+3

Murmur2 ha una distribuzione eccellente, ma mentre è necessario per l'hashing crittografico, è non sufficiente. In altre parole, l'hash non è resistente alla * manomissione * intenzionale. –