在ruby上生成哈希

kha*_*anh 4 ruby ruby-on-rails

在生产服务器上:

"KYK_iphone3.jpg".hash.abs%1000
=> 908
Run Code Online (Sandbox Code Playgroud)

但是在登台服务器上:

"KYK_iphone3.jpg".hash.abs%1000
=> 740
Run Code Online (Sandbox Code Playgroud)

这两个哈希不匹配.你能否告诉我你在这种情况下该怎么做的想法?

ham*_*mar 9

Ruby的默认散列不保证在各实现之间保持一致.如果需要一致的哈希值,则应使用标准化的哈希算法,如MD5,SHA1或类似方法.

编辑:经过 进一步调查,事实证明它在不同的过程中甚至不一致:

$ irb
> "abc".hash
 => 3669021835949727595
> exit 
$ irb
> "abc".hash
 => 2091809102525897616
Run Code Online (Sandbox Code Playgroud)

看起来这可能是从Perl继承预期安全功能,以防止算法复杂性攻击.