Как мне хэшировать строку с Delphi?

Как сделать MD5-хеш строки с помощью Delphi?

11 ответов

Если вы хотите получить дайджест MD5 и установить компоненты Indy, вы можете сделать это:

uses SysUtils, IdGlobal, IdHash, IdHashMessageDigest;

with TIdHashMessageDigest5.Create do
try
    Result := TIdHash128.AsHex(HashValue('Hello, world'));
finally
    Free;
end;

Самые популярные алгоритмы поддерживаются в пакете криптографии Delphi:

  • Haval
  • MD4, MD5
  • RipeMD-128, RipeMD-160
  • SHA-1, SHA-256, SHA-384, SHA-512,
  • тигр

ОбновитьDCPCrypt В настоящее время поддерживается Warren P и источник можно найти здесь.

Если вам нужна хеш- строка MD5 в виде hexadeciamal, и у вас установлен Delphi XE 1, то есть у вас есть компоненты Indy 10.5.7, вы можете сделать это:

использует IdGlobal, IdHash, IdHashMessageDigest;

class function getMd5HashString(value: string): string;
var
    hashMessageDigest5 : TIdHashMessageDigest5;
begin
    hashMessageDigest5 := nil;
    try
        hashMessageDigest5 := TIdHashMessageDigest5.Create;
        Result := IdGlobal.IndyLowerCase ( hashMessageDigest5.HashStringAsHex ( value ) );
    finally
        hashMessageDigest5.Free;
    end;
end;

Почему бы не использовать system.Hash модуль из RTL, который также содержит хеш-алгоритм для MD5 начиная с Delphi Seattle?

MD5HashCode := THashMD5.GetHashString(ClearTextString);

Я обычно использую DCPCrypt2 ( пакет криптографии Delphi) от Дэвида Бартона (" Город в небе").

Он также содержит следующие алгоритмы шифрования:

  • Blowfish
  • Cast 128
  • Cast 256
  • DES, 3DES
  • Лед, тонкий лед, лед2
  • IDEA
  • Марс
  • misty1
  • RC2, RC4, RC5, RC6
  • Рейндаэль (новый AES)
  • змий
  • Чай
  • Twofish

ОбновитьDCPCrypt В настоящее время поддерживается Warren P и источник можно найти здесь.

Это модификация ответа devstopfix, которая была принята.

В текущей версии Indy вы можете легко хешировать строки и потоки. Пример:

function MD5String(str: String): String;
begin
  with TIdHashMessageDigest5.Create do
    try
      Result := HashStringAsHex(str);
    finally
      Free;
    end;
end;

использование HashString, HashStringAsHex, HashBytes, HashBytesAsHex, HashStream, HashStreamAsHex, Преимущество в том, что вы также можете указать кодировку текста

Проект Spring For Delphi - http://www.spring4d.org/ - имеет реализацию для нескольких хэшей SHAxxx, хешей MD5, а также ряда функций CRC.

Если все, что вы хотите сделать, это использовать словарь, а вам не нужна безопасность, то:
В Delphi 2009 и выше, хеш-значения для строк могут быть созданы с помощью

BobJenkinsHash(Value, Length(Value) * SizeOf(Value), 0)

где Value - это строка

http://docwiki.embarcadero.com/VCL/en/Generics.Defaults.BobJenkinsHash

Вы также можете использовать WindowsCrypto API с Delphi:

Там есть блок, который оборачивает все CryptoAPI. Вы также можете использовать Lockbox, который теперь с открытым исходным кодом.

В конце концов, вы можете поддерживать практически любые алгоритмы хэширования с Delphi. Пример Indy, вероятно, наиболее близок к Delphi, поскольку Indy включен в большинство версий Delphi. В остальном вам нужно будет либо использовать библиотеку, либо написать еще немного кода для доступа к CryptoAPI или реализовать его самостоятельно.

TurboPower Lockbox поддерживает:

  • MD-5,
  • ША-1 и
  • все семейство SHA-2, включая недавно опубликованные хэши SHA-512/224 и SHA-512/256.

Последняя версия Delphi позволяет реализовать нечто гораздо более простое, чем все предыдущие решения:

      uses System.Hash;

function CalculateMD5Hash(const InString: String): String;
begin
  Result := UpperCase(THashMD5.GetHashString(InString));
end;

Используя ICS, вы просто вызываете функцию StrMD5, которая находится в модуле OverbytecsMD5.

Помимо этой конкретной функции, существует гораздо больше функций MD5 для других типов данных и сценариев. Существуют также другие методы хеширования, такие как SHA.

Другие вопросы по тегам