我需要在Ruby中为一个变量创建一个签名字符串,该变量可以是数字、字符串、哈希或数组。哈希值和数组元素也可以是其中的任何一种类型。这个字符串将用于比较数据库(在这种情况下是Mongo)中的值。我的第一个想法是创建一个JSON编码值的MD5哈希,如下所示:(上面提到的变量是body)。
def createsig(body)
Digest::MD5.hexdigest(JSON.generate(body))
end
这个方法几乎可行,但是JSON.generate不会每次以相同的顺序编码哈希的键,因此 createsig({:a=>'a',:b=>'b'})
并不总是等于 createsig({:b=>'b',:a=>'a'})
。
有什么最好的方法可以创建一个符合这个需求的签名字符串呢?
注意:对于那些注重细节的人,我知道你不能 JSON.generate()
一个数字或字符串。在这些情况下,我会直接调用 MD5.hexdigest()
。
x.hash
(或x.hash
和x.class
的组合)。 - mu is too short