Функция шифрования по алгоритму MD5 RSA Data Security, Inc. Вычисляет 128-битовую контрольную сумму MD5 для аргумента. Возвращаемая величина представляет собой 32-разрядное шестнадцатеричное число, которое может быть использовано, например, в качестве хеш-ключа
string md5 ( string $str [, bool $raw_output] ) Вычисляет MD5 хэш строки str используя алгоритм MD5 RSA Data Security, Inc. и возвращает этот хэш. Хэш представляет собой 32-значное шестнадцатеричное число. Если необязательный аргумент raw_output имеет значение TRUE, то возвращается бинарная строка из 16 символов.
MD5(string) Вычисляет 128-битовую контрольную сумму MD5 для аргумента string. Возвращаемая величина представляет собой 32-разрядное шестнадцатеричное число, которое может быть использовано, например, в качестве хеш-ключа: mysql> SELECT MD5("testing"); -> 'ae2b1fca515949e5d54fb22b8ed95575' Это "RSA Data Security, Inc. MD5 Message-Digest Algorithm".
Для разнообразия этот пример компилирую используя IDE, т е программу E:\FPC2.0.4\bin\i386-win32\fp.exe Для удобства запуска этой среды создаю в папке с программами (т е файлами *.pp) командный (текстовый) файл IDE.cmd следующего содержания:
E:\FPC2.0.4\bin\i386-win32\fp.exe
При запуске IDE.cmd запускается IDE, причем в окне редактора находится файл, с которым работали в прошлом сеансе. Познакомимся с наиболее важными настройками:
--------¬---------------¬-----------¬--------------¬-------¬ ¦ Units ¦ Include files ¦ Libraries ¦ Object files ¦ Misc. ¦ ¦ L---------------------------------------------------¬ ¦ Unit directories: ¦ ¦E:\FPC2.0.4\units\i386-Win32 ¦ ¦E:\FPC2.0.4\units\i386-Win32\* ¦ ¦E:\FPC2.0.4\units\i386-Win32\rtl ¦Вижу, что пути поиска модулей заданы нормально.
г=[¦]========== Install Help Files ==============¬ ¦ ¦ ¦ Help files ¦ ¦ E:\XRAN_RW_MyProg\TPAS7\Turbo.tp OK - ¦ ¦ - ----------- ¦ ¦ - New - ¦ ¦ - ----------- ¦ ¦ - Delete - ¦ ¦ - ----------- ¦ ¦ - Cancel - ¦
{ This file is part of the Free Pascal packages. Copyright (c) 1999-2000 by the Free Pascal development team Tests the MD5 program. See the file COPYING.FPC, included in this distribution, for details about the copyright. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. **********************************************************************} program md5test; {$h+} uses md5; var I: byte; const Suite: array[1..7] of string = ( 'testing', 'a', 'abc', 'message digest', 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', '12345678901234567890123456789012345678901234567890123456789012345678901234567890' ); begin Writeln('Executing RFC 1321 test suite ...'); for I := 1 to 7 do Writeln('MD5 ("',Suite[i],'") = ',MD5Print(MD5String(Suite[I]))); Writeln(); Writeln('md5file (50) : ',md5print(Md5File('md5test.pas',50))); Writeln('md5file (def) : ',md5print(Md5File('md5test.pas'))); Writeln('Press Enter'); readln; end. ========== РЕЗУЛЬТАТЫ: ========================= Running "e:\xran_rw_myprog\fpc_fpc\md5test.exe " Executing RFC 1321 test suite ... MD5 ("testing") = ae2b1fca515949e5d54fb22b8ed95575 MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661 MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72 MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0 MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = d174ab9 8d277d9f5a5611c2c9f419d9f MD5 ("12345678901234567890123456789012345678901234567890123456789012345678901234 567890") = 57edf4a22be3c955ac49da2e2107b67a md5file (50) : d41d8cd98f00b204e9800998ecf8427e md5file (def) : d41d8cd98f00b204e9800998ecf8427e Press Enter =========== Синтаксис подпрограмм (см интерфейсы) ================= function MD5String(const S: String): TMD5Digest; inline; где type TMD5Digest = TMDDigest; type TMDDigest = array[0..15] of Byte; --------- function MD5Print(const Digest: TMD5Digest): String; inline; --------- function MD5File(const Filename: String; const Bufsize: PtrUInt = MDDefBufSize): TMD5Digest; inline; где const MDDefBufSize = 1024;
Вижу, что результат от строки "testing" совпадает с результатом для этой строки, возвращаемым функцией MD5("testing"); - MySQL. Это дополнительная интересная проверка. В связи с этим примером возник вопрос: где можно скачать интерфейсы модулей? На форуме freepascal.ru советуют (Mr.Smart) http://freepascal.org/down/source/sources.var