Навіщо це знадобилося
Виникла задача визначити "якість" зберігання і копіювання якихось великих
файлів. Створювалися вони само собою на жорсткому диску, потім могли бути
скопійовані по локальній мережі, закачувалися на FTP сервер, записувалися на
CDR (W). Тут і постала проблема виявлення "битих" копій. Загальний метод боротьби
відомий: вважай контрольну суму. Який з алгоритмів вибрати? Зупинилися на
MD5 з наступних причин:
- це сучасний, стійкий, швидкий алгоритм
- існують консольні утиліти для обчислення
- безкоштовна реалізація у вигляді динамічної бібліотеки
- нафіга ще шукати, якщо це чудово працює;)
The MD5 Message-Digest Algorithm
Спочатку змусимо Google пошукати "md5". У перших рядках отримуємо посилання на
MD5
Homepage (unofficial) звідки дізнаємося, що
MD5 був розроблений в 1992 році Професором
Ronald L. Rivest з Массачусетського технологічного інституту (MIT), одним із засновників RSA Security.
Детальний опис можна знайти в RFC 1321, а якщо коротко, то
[MD5 алгоритм] отримує на вхід повідомлення довільної довжини і на виході
видає "підпис" (сигнатуру) довжиною 128 бітів. Передбачається, що не існує
двох повідомлень мають однакові сигнатури, або, що неможливо створити
повідомлення із заздалегідь заданою сигнатурою. MD5 алгоритм в основному використовується в
кріпрографіческіх додатках типу RSA. По суті, MD5 – це спосіб перевірки
цілісності даних, набагато більш надійний, ніж контрольна сума або інші
методи.
Інший розумний мужик Francisco Carlos Piragibe de Almeida написав нам на
щастя a
DLL with a BAS wrapper module
Крім того знаходимо парочку консольних утиліт
- Command Line
Message Digest Utility
- MD5
Checksum Utility
Умови використання прості – не забувайте вказати "RSA Data Security, Inc.
MD5 Message-Digest Algorithm "у своїх програмах та інших матеріалах. Що
власне і делем;)
Починаємо реалізовавать нові знання
Для початку бейсіковскую програмку переводимо на Лисиной мову, попутно
виправляючи помилки (кому цікаво може теж поразвлекаться з Fault Error)
і оформляючи все у вигляді класу.
*————————————————–
* Це буде метод Init
*————————————————–
DECLARE INTEGER MDStringFix IN aamd532.dll STRING s, LONG l, STRING r
DECLARE INTEGER MDFile IN aamd532.dll STRING f, STRING r
*————————————————–
* Function MD5String – оформимо однойменним методом
*————————————————–
PARAM s
r = SPACE(32)
l = LEN(s)
= MDStringFix( s, l, @r)
RETURN r
*————————————————–
* Function MD5File – оформимо однойменним методом
*————————————————–
PARAM fname
r = SPACE(32)
= MDFile( fname, @r)
RETURN r
У Command вікні протестуємо обидва методи. Для перевірки першого в кінці RFC 1321
наведено тестові зразки. Для перевірки сигнатури файлу візьмемо зразок з
дистрибутива FreeBSD 4.1-RELEASE У кожній папці з файлами там є
файл checksum.md5, Який являє собою список сигнатур файлів.
set classlib to md5
o = createobject ("md5") & & —— Правильні відповіді ——-
? o.md5string ("") & & d41d8cd98f00b204e9800998ecf8427e
? o.md5string ("a") & & 0cc175b9c0f1b6a831c399e269772661
? o.md5string ("abc") & & 900150983cd24fb0d6963f7d28e17f72
? o.md5string ("message digest") & & f96b697d7cb7938d525a2f31aaf161d0
? o.md5string (space (15 млн)) & & Сигнатура 15 мільйонів прогалин;)
? o.md5file ("bin.aa") & & e16d5641bd71c1308b9a85d47b3e6309
? o.md5file ("blabla.bla") & & FILE NOT FOUND
Власне метод, який використовується у FreeBSD, Нас цілком влаштовує.
Перед тим як перемістити дані будемо створювати файл checksum.md5 Для
цього служить метод нашого класу MD5MakeList, Яким будемо передавати
шлях до папки з даними, а він породить нам список і поверне число оброблених
файлів або -1 при помилці. Пізніше в клас були додані простенький
"Прогрессбара" (щоб користувач не нудьгував;), а також властивості:
- StopAtError – Якщо. F., то процес обрахунку не переривається при
помилках.
- BadFileCount – Після MD5MakeList містить число необсчітанних
файлів.
Download
Це архів з класом md5.vc *, бібліотекою aamd532.dll і
утилітки md5.exe
aamd532.dll скопіювати в WindowsSystem або
WINNTSystem32
PS. MD5 (md5vfp.zip) = dc8e6ec6d0e84fff9fb4c73289c09210 🙂
Завантажити md5vfp.zip [18 Кб]Схожі статті:
- Цикл від людини - Рекурсія від Бога. (0)
- Час виконання скрипта на PHP. (0)
- Cookies в PHP. (0)
- Перші кроки з ERwin 4.0 - публікація в Web і будівник шаблонів звітів (0)
- Використання СOM в середовищі Delphi (0)
- Перевірка орфографії в Firefox (0)
- Швидке створення точок відновлення Windows (0)
Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.
Коментарів поки що немає.
Ваш отзыв
Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>