Оглавление Free Pascal: пример - необратимое шифрование md5


Функция шифрования по алгоритму MD5 RSA Data Security, Inc. Вычисляет 128-битовую контрольную сумму MD5 для аргумента. Возвращаемая величина представляет собой 32-разрядное шестнадцатеричное число, которое может быть использовано, например, в качестве хеш-ключа

Описание функции md5 из справочника PHP5:

string md5 ( string $str [, bool $raw_output] )

Вычисляет MD5 хэш строки str используя алгоритм MD5 RSA Data Security, Inc. и возвращает 
этот хэш. Хэш представляет собой 32-значное шестнадцатеричное число. Если необязательный 
аргумент raw_output имеет значение TRUE, то возвращается бинарная строка из 16 символов. 

Описание функции md5 из справочника MySQL4:

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, причем в окне редактора находится файл, с которым работали в прошлом сеансе. Познакомимся с наиболее важными настройками:

Текст программы и результаты:

{
    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

Rambler's Top100
Hosted by uCoz