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.)
fonte
2010-12-15 16:20:34
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
ma quale funzione dovrei usare? MD5 SHA o altri? grazie mille. – ywenbo
@ywenbo Ho risposto anche a questo. –