我需要为 Ruby 中的变量创建签名字符串,其中变量可以是数字、字符串、散列或数组。哈希值和数组元素也可以是这些类型中的任何一种。
此字符串将用于比较数据库中的值(在本例中为 Mongo)。
我的第一个想法是创建一个 JSON 编码值的 MD5 哈希,如下所示:(body 是上面提到的变量)
def createsig(body)
Digest::MD5.hexdigest(JSON.generate(body))
end
这几乎可行,但 JSON.generate 不会每次都以相同的顺序对哈希的键进行编码,因此createsig({:a=>'a',:b=>'b'})
并不总是 equal createsig({:b=>'b',:a=>'a'})
。
创建签名字符串以满足此需求的最佳方法是什么?
注意:对于我们之间的细节导向,我知道你不能JSON.generate()
数字或字符串。在这些情况下,我会直接打电话MD5.hexdigest()
。