如何在JavaScript中计算ruby​​哈希?

我有一个用例来发送负载的哈希码以及请求中的负载。

我的客户端是 Ruby,但服务器是 Rails 和 Node。

为有效负载(任何 Ruby HashMap)创建哈希码的最佳方法是什么?

如何在另一台服务器上创建相同的哈希码?

>> x = {:name=>"John", :age=>30, :cars=>{:car1=>"Ford", :car2=>"BMW", :car3=>"Fiat"}} 
>> x.hash
-4250725627701565010

回答

这不可能。

Ruby 对哈希码做出的唯一保证是:

  • eql?具有相同哈希码的两个对象。
  • 对象的哈希码不会改变,除非它发生变异。
  • 哈希码是一个Integer. 在某些方法中,它可能会被截断为固定宽度的整数。

特别是,保证以下内容:

  • 无法保证 Ruby 实现使用任何特定的散列算法。
  • 不能保证一个对象的哈希值在不同的 Ruby 实现中是相同的。
  • 不能保证对象的哈希值在同一个 Ruby 实现的不同版本之间是相同的。
  • 不能保证对象的哈希值在同一 Ruby 实现的同一版本的不同进程之间是相同的。
  • 不能保证对象的哈希值在同一 Ruby 实现的同一版本的同一进程中的同一代码的不同运行之间是相同的。

事实上,出于安全目的,一些 Ruby 实现会随机化哈希码。

换句话说,在 Ruby 中甚至没有办法知道对象在运行时的哈希码是什么,所以在 ECMAScript 中绝对没有办法知道这一点。


以上是如何在JavaScript中计算ruby​​哈希?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>