Как мне хэшировать строку с 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.