Ruby 1.8和1.9是否具有相同的字符串哈希码?

时间:2010-12-15 16:15:39

标签: ruby hash

我想使用String.hash生成哈希码,但我担心如果稍后我将版本从1.8升级到1.9,生成的哈希码也会发生变化。

Ruby 1.8和1.9是否具有相同的字符串哈希码?

1 个答案:

答案 0 :(得分:18)

幸运的是,答案很简单,因为他们没有:

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

如果您使用内置哈希方法,我建议您在构建过程中使用脚本生成必要的哈希码。请注意,即使从一台机器到另一台机器,也不能保证它们相同。

如果您需要一致性哈希,请使用CRC32SHA1

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

它们具有完全不同的用途,但CRC32具有返回32位数字并且速度非常快的优点,而SHA1是80位数字但更安全。 (我假设这不是用于加密目的,但如果需要,请查看SHA-256。)