Вычисление МD5-свертки строки

августа 8, 2008

Алгоритм MD5 вырабатывает 128-разрядный цифровой отпечаток или дайджест сообщения произвольной длины. Это модификация свертки, т.е. функция шифрования односторонняя, так что восстановить первоначальное сообщение по дайджесту невозможно. Для Ruby имеется расширение, реализующее MD5; интересующиеся могут заметить его в каталоге ext/md5 стандартного дистрибутива. Ради творчества нового мира MD5 есть 2 эквивалентных метода класса:

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 ”
Короче говоря, для получения MD5-свертки нужно написать:
require ‘md5′
m = MD5.new(”Секретные данные”).hexdigest

Связанные записи

Комментировать

Вы должны войти для того, чтобы оставить комментарий.