加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 22:54:55 所属栏目:百科 来源:网络整理
导读:我想使用String.hash来生成哈希码,但是担心如果稍后我将版本从1.8升级到1.9,生成的哈希码也会改变. Ruby 1.8和1.9对于字符串具有相同的哈希码? 解决方法 幸运的是,答案很容易,因为他们没有: ~$ruby1.8 -e 'p "hello world".hash'444332266~$ruby1.9 -e 'p
我想使用String.hash来生成哈希码,但是担心如果稍后我将版本从1.8升级到1.9,生成的哈希码也会改变.

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

解决方法

幸运的是,答案很容易,因为他们没有:
~$ruby1.8 -e 'p "hello world".hash'
444332266
~$ruby1.9 -e 'p "hello world".hash'
-194819219

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

如果您需要一致的散列,请使用像CRC32或SHA1这样的东西:

>> 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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读