出于缓存目的,我想为各种有效负载生成sha256哈希。哈希应该足够安全,以忽略字段顺序的变化。
对于表单数据,这将非常简单,例如此正文foo=bar&test=data
可以按&
和=
进行拆分,排序,加入,然后像这样进行散列:
require 'digest'
data = "test=data&foo=bar"
joined_data = data.split("&").map {|pair| pair.split("=") }.sort { |a,b| a[0] <=> b[0] }.flatten.join
Digest::SHA256.hexdigest joined_data
# => "cf0bb2aa96a34e404a2901eec34214033dbf73f4242330f0e77c534bf38da585"
但对于JSON数据,这要困难得多。首先,键的顺序与内容无关,但是数组内部的顺序确实很重要,键和数组可以嵌套等等......
我可以实现一个JSON.parse(body)
,然后将ruby哈希值转换为一个数组,对键进行排序,并在完成之前(也在数组内部)执行所有操作。
第一个问题:是否已有哈希JSON数据的解决方案?
第二个问题:除了JSON,表单数据,普通字符串和二进制数据,还应该考虑哪些其他数据结构,哪些顺序不重要? XML?还有什么吗?