CryptoAPI & hashes

Решил выложить небольшую либу для подсчета хэш-сумм (MD2, MD4, MD5, SHA, CRC32) блока памяти и файлов. Её целью не является достичь максимального быстродействия, а скорее достичь компактности кода – минимизация за счет использования библиотеки CryptoAPI.

Весь код либы я тут выкладывать не буду, она доступна для скачки ниже, а лишь поясню как и чего =)

Функция возвращающая хэш сумму для блока памяти:

function GetHash(Data: Pointer; var nSize: Cardinal; HashType: THashType): Pointer;

Data [in] – указатель на буфер, для которого высчитывается хэш сумма;
nSize [in,out] – размер буфера с данными, после выполнения функции, данной переменной присваивается размер данных хэш суммы;
HashType [in] – тип высчитываемой хэш суммы (MD2, MD4, MD5, SHA1, CRC32).

Вывод хэш суммы в текстовом формате:

function BinToHexStr(Bin: Pointer; nSize: Cardinal): String;

Bin [in] – указатель на буфер с полученной хэш суммой;
nSize [in] – размер буфера с хэш суммой.

Функция возвращающая хэш сумму для файла:

function FileToHash(const FileName: String; var dwSize: Cardinal; HashType: THashType): Pointer;

FileName [in] – имя файла, для которого высчитывается хэш сумма;
dwSize [out] – данной переменной присваивается размер данных хэш суммы;
HashType [in] – тип высчитываемой хэш суммы (MD2, MD4, MD5, SHA1, CRC32).

Пару примерчиков:

Для строки (блока памяти):

procedure TForm1.Button1Click(Sender: TObject);
var
  digest: Pointer;
  dwSize: Cardinal;
  Str: String;
begin
  Str:= 'bla-bla-bla';
  dwSize:= Length(Str);
  digest:= GetHash(@Str[1], dwSize, ALG_MD5);
  if digest <> nil then try
    Str:= BinToHexStr(digest, dwSize);
    ShowMessage(Str);
  finally
    FreeMem(digest);
  end;
end;

Для файла:

procedure TForm1.Button1Click(Sender: TObject);
var
  digest: Pointer;
  dwSize: Cardinal;
  Str: String;
begin
  Str:= 'c:\test.txt';
  digest:= FileToHash(Str, dwSize, ALG_MD5);
  if digest <> nil then try
    Str:= BinToHexStr(digest, dwSize);
    ShowMessage(Str);
  finally
    FreeMem(digest);
  end;
end;

Скачать: HashCryptoAPILib.rar [ 1,6kB] загрузок: 805


Комментарии

  1. Dmitriy · 7 Январь 2011, 23:48 · #

    Спасибо, пригодилось. Успехов :)