Создание хэша md5 числа, строки, массива или хэша в Ruby

Мне нужно создать строку подписи для переменной в Ruby, где переменная может быть числом, строкой, хешем или массивом. Хеш-значения и элементы массива также могут быть любого из этих типов.

Эта строка будет использоваться для сравнения значений в базе данных (в данном случае Mongo).

Моей первой мыслью было создать хэш MD5 для значение в кодировке JSON, например: (body - это указанная выше переменная)

def createsig(body)    
  Digest::MD5.hexdigest(JSON.generate(body))
end

Это почти работает, но JSON.generate не кодирует ключи хеша каждый раз в одном и том же порядке, поэтому createdig ({ : a => 'a',: b => 'b'}) не всегда равно createdig ({: b => 'b',: a => 'a'}) .

Как лучше всего создать строку подписи, отвечающую этой потребности?

Примечание. Что касается ориентированности на детали среди нас, я знаю, что вы не можете JSON.generate () a число или строка. В этих случаях я бы просто вызвал MD5.hexdigest () напрямую.

40
задан TelegramSam 23 June 2011 в 23:29
поделиться