如何设置ruby杂音哈希的种子值

如何设置ruby杂音哈希的种子值,ruby,jruby,hashcode,murmurhash,minhash,Ruby,Jruby,Hashcode,Murmurhash,Minhash,是否有一种方法可以设置使用ruby哈希函数的种子值(即1.9中的杂音哈希,不知道JRuby?),以便每次运行脚本时都可以得到相同的哈希代码(即在多个进程或不同节点上并行运行) 所以 放入“这是一个测试”。散列 无论何时,无论是今天、明天,还是从现在起的3周,我都会这样做 我想这样做,以便能够并行实现MinHash 我可以在杂音散列gem中看到杂音散列接受一个种子,所以我假设我可以设置种子,并在我选择同一个种子时确定地获得散列代码,如果有人想知道的话,重新激活它 您可以使用3gem 您可以重写St

是否有一种方法可以设置使用ruby哈希函数的种子值(即1.9中的杂音哈希,不知道JRuby?),以便每次运行脚本时都可以得到相同的哈希代码(即在多个进程或不同节点上并行运行)

所以

放入“这是一个测试”。散列

无论何时,无论是今天、明天,还是从现在起的3周,我都会这样做

我想这样做,以便能够并行实现MinHash


我可以在杂音散列gem中看到杂音散列接受一个种子,所以我假设我可以设置种子,并在我选择同一个种子时确定地获得散列代码,如果有人想知道的话,重新激活它

您可以使用
3
gem

您可以重写
String
类中内置的哈希函数

require 'murmurhash3'
class String

  SEED = 12345678

  def hash
    MurmurHash3::V32.str_hash(self,SEED)
  end
end
不,您可以对任何字符串使用此哈希函数

$ irb
2.1.1 :001 > "this is a test".hash
=> 553036434 
假设您使用相同的种子
12345678
,那么您应该在任何服务器、进程或线程上重复获得相同的哈希值

并行散列 您可以
parallel
gem

然后简单地传递您想要并行执行/散列的项目列表

items_to_hash = ['val0', 'val1',...., 'valN']
results = Parallel.map(items_to_hash) do |item|
   item.hash
end
如果您不喜欢使用另一个gem并行执行哈希,那么下面是一个使用vanillarybruby的示例。

试试这个种子0xbc9f1d34,来自jeff dean的LevelDB源代码:)

你能告诉我们你安装了哪些gem并且
要求
d强制哈希值相同可能会打开你的代码进行攻击吗。散列被故意强制为随机的。