Алгоритм MD5 вырабатывает 128-разрядный цифровой отпечаток или дайджест
сообщения произвольной длины. Это разновидность свертки, то есть функция
шифрования односторонняя, так что восстановить исходное сообщение по дайджесту невозможно. Для Ruby имеется расширение, реализующее MD5; интересующиеся могут найти его в каталоге ext/md5 стандартного дистрибутива.
Для создания нового объекта MD5 есть два эквивалентных метода класса:
И md5:
require 'md5'
hash = MD5.md5
hash = MD5.new
Есть также четыре метода экземпляра: clone, digest, hexdigest и update. Метод clone просто копирует существующий объект, а метод update добавляет новые данные к объекту:
hash.update("Дополнительная информация...")
Можно создать объект и передать ему данные за одну операцию:
secret = MD5.new("Секретные данные")
Если задан строковый аргумент, он добавляется к объекту путем обращения к
методу update. Повторные обращения эквивалентны одному вызову с конкатенированными аргументами:
# Эти два предложения:
cryptic.update("Данные...")
cryptic.update(" еще данные.")
# ...эквивалентны одному такому:
cryptic.update("Данные... еще данные.")
Метод digest возвращает 16-байтовую двоичную строку, содержащую 128-ргэ
рядный дайджест.
Но наиболее полезен метод hexdigest, который возвращает дайджест в вид
строки в коде ASCII, состоящей из 32 шестнадцатеричных символов, соответствующих 16 байтам. Он эквивалентен следующему коду:
def hexdigest
ret = ' '
digest.each_byte {lil ret << sprintf('%02x ' , i) }
end
secret.hexdigest # Mb30e77a94604b7Sbd7a7e64ad500f3c2 "
Короче говоря, для получения 1УШ5-свертки нужно написать:
require 'md51
m = MD5.new("Секретные данные").hexdigest
