Давно ничего не писал в блог. На днях изучал OpenSSL и признаться честно, я даже влюбился в эту библиотеку.
Ранее, например, md5-хеш в Delphi создавал с помощью модуля IdHashMessageDigest, идущей вместе с Indy:
uses IdHashMessageDigest;
...
function md5(const s:ansistring):ansistring;
begin
with TIdHashMessageDigest5.Create do
try
Result:=AnsiLowerCase(HashStringAsHex(s));
finally
Free;
end;
end;
На днях необходимо было внедрить в проект RSA. Сначала ринулся браться за CryptoAPI, но увы, данная библиотека не расшифровывает данные public key, зашифрованные private key. У различных компонентов своеобразная структура ключей, отличная от OpenSSL (да и у CryptoAPI она в *blob формате). Поэтому решил взяться за OpenSSL и не пожалел. :) Библиотека просто суперская!
Теперь в своих приложениях буду использовать только OpenSSL, например, вот как выглядит md5 функция на OpenSSL:
function OpenaSSL_md5(const source:ansistring):AnsiString;
var
_md5:md5_ctx;
i:Byte;
Hash:array[0..MD5_DIGEST_LENGTH] of AnsiChar;
begin
if MD5_Init(@_md5)<>1 then exit;
MD5_Update(@_md5, @source[1], Length(source));
MD5_Final(@Hash, @_md5);
for i:=0 to MD5_DIGEST_LENGTH-1 do
result:=result+IntToHex(Ord(Hash[I]), 2);
result:=AnsiLowerCase(result);
end;
Буквально за 15-20 минут накидал программу Hasher, создающую различные типы хешей.
Можно сгенерировать следующие хеши: mdc2, md4, md5, sha, sha-1, sha-224, sha-256, sha-384, sha-512, ripemd-160.
Если кого-то интересуют исходные коды какого вида хеша, пишите в комментариях.
Скачать программу можно по ссылке ниже.