2010-12-15 10 views

Odpowiedz

15

szczęście, odpowiedź jest prosta, ponieważ nie:

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

Jeśli używasz wbudowanego metody mieszania, polecam o skrypt jako część procesu kompilacji, który generuje niezbędne hashcodes. Należy pamiętać, że nie ma gwarancji, że będą one takie same, nawet z jednej maszyny do drugiej.

Jeśli potrzebujesz spójnej hashowania, użyć czegoś podobnego CRC32 lub SHA1:

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

Mają zupełnie różne cele, ale CRC32 ma tę zaletę, zwracając liczbę 32-bitową i jest dość szybki, a SHA1 jest 80-bitowy numer, ale bezpieczniejszy. (Zakładam, że to nie jest dla celów kryptograficznych, ale spójrz na SHA-256, jeśli potrzebujesz.)

+0

dziękuję bardzo, teraz mogę zdecydować, że funkcja mieszania ruby ​​nie jest niezawodna. powinienem wybrać funkcję hash do wygenerowania kodu, jak kod skrótu ruby. masz jakąś sugestię? :-) Dodałem jeszcze jedno pytanie? – ywenbo

+0

, ale której funkcji należy użyć? MD5 SHA lub inne? Dziękuję bardzo. – ywenbo

+0

@ywenbo Ja również odpowiedziałem. –

Powiązane problemy