如何使用 Delphi 对字符串进行 MD5 哈希?
10 回答
如果你想要一个 MD5 摘要并安装了Indy组件,你可以这样做:
uses SysUtils, IdGlobal, IdHash, IdHashMessageDigest;
with TIdHashMessageDigest5.Create do
try
Result := TIdHash128.AsHex(HashValue('Hello, world'));
finally
Free;
end;
Delphi Cryptography Package支持最流行的算法:
- 哈弗
- MD4、MD5
- 成熟MD-128,成熟MD-160
- SHA-1、SHA-256、SHA-384、SHA-512、
- 老虎
更新
DCPCrypt
现在由Warren Postma维护,源代码可以在这里找到。
如果你想要一个十六进制的MD5 哈希字符串并且你已经安装了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;
I usually use DCPCrypt2 (Delphi Cryptography Package) from David Barton (City in the Sky).
It is also contains the following Encryption Algorithms:
- Blowfish
- Cast 128
- Cast 256
- DES, 3DES
- Ice, Thin Ice, Ice2
- IDEA
- Mars
- Misty1
- RC2, RC4, RC5, RC6
- Rijndael (the new AES)
- Serpent
- Tea
- Twofish
Update
DCPCrypt
is now maintained by Warren Postma and source can be found here.
为什么不使用system.Hash
RTL 的单元,它还包含自 Delphi Seattle 以来的 MD5 哈希算法?
MD5HashCode := THashMD5.GetHashString(ClearTextString);
这是对 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 中最接近本机的示例,因为大多数版本的 Delphi 都包含 Indy。对于其余部分,您将需要使用库或编写更多代码来访问 CryptoAPI 或自己实现它。
- MD-5,
- SHA-1 和
- 整个 SHA-2 系列,包括最近发布的 SHA-512/224 和 SHA-512/256 哈希。
使用 ICS,您只需调用位于 OverbytecsMD5 单元中的 StrMD5 函数。
除了该特定功能之外,还有更多适用于其他数据类型和场景的 MD5 功能。还有其他哈希方法,例如 SHA。