Навіщо це знадобилося, FoxPro, Бази даних, статті

Виникла завдання визначити "якість" зберігання і копіювання якихось великих
файлів. Створювалися вони само собою на жорсткому диску, потім могли бути
скопійовані по локальній мережі, закачувалися на FTP сервер, записувалися на
CDR (W). Тут і встала проблема виявлення "битих" копій. Загальний метод боротьби
відомий: вважай контрольну суму. Який з алгоритмів вибрати? Зупинилися на
MD5 з наступних причин:



The MD5 Message-Digest Algorithm


Спочатку змусимо Google пошукати "md5". У перших рядках отримуємо посилання на
Професором
Ronald L. Rivest
з Массачусетського технологічного інституту (MIT), Одним із засновників a
DLL with a BAS wrapper module

Крім того знаходимо парочку консольних утиліт



Умови використання прості – не забувайте вказати "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 (15000000)) & & Сигнатура 15000000 прогалин;)
? 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 🙂

[18 Кб]

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*