2010-12-15 12 views

risposta

15

Fortunatamente, la risposta è semplice perché non:

~$ ruby1.8 -e 'p "hello world".hash' 
444332266 
~$ ruby1.9 -e 'p "hello world".hash' 
-194819219 

Se si utilizza il metodo hash incorporato, consiglio avendo uno script come parte del processo di generazione che genera i codici hash necessarie. Si noti che non è garantito che siano uguali anche da una macchina all'altra.

Se avete bisogno di hashing coerente, utilizzare qualcosa come CRC32 o SHA1:

>> require 'zlib' 
>> Zlib.crc32 "hello world" 
=> 222957957 
>> require 'digest' 
>> Digest::SHA1.hexdigest "hello world" 
=> "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed" 
>> Digest::MD5.hexdigest "hello world" 
=> "5eb63bbbe01eeed093cb22bb8f5acdc3" 

Essi hanno scopi molto diversi, ma CRC32 ha il vantaggio di restituire un numero a 32 bit e di essere abbastanza veloce, mentre SHA1 è un numero di 80 bit ma più sicuro. (Suppongo che questo non sia a scopo di crittografia, ma guarda in SHA-256 se ne hai bisogno.)

+0

grazie mille, ora posso decidere che la funzione di hash rubino non è affidabile. dovrei scegliere io stesso la funzione hash per generare il codice come il codice hash rubino. hai qualche suggerimento? :-) ho aggiunto un'ulteriore domanda? – ywenbo

+0

ma quale funzione dovrei usare? MD5 SHA o altri? grazie mille. – ywenbo

+0

@ywenbo Ho risposto anche a questo. –

Problemi correlati