26

如何使用 Delphi 对字符串进行 MD5 哈希?

4

10 回答 10

29

如果你想要一个 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维护,源代码可以在这里找到。

于 2008-09-12T10:28:23.117 回答
20

如果你想要一个十六进制的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;
于 2013-08-14T13:44:52.133 回答
11

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.

于 2008-09-17T13:30:53.700 回答
11

为什么不使用system.HashRTL 的单元,它还包含自 Delphi Seattle 以来的 MD5 哈希算法?

MD5HashCode := THashMD5.GetHashString(ClearTextString);
于 2020-03-09T15:40:21.137 回答
8

这是对 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. 优点是还可以指定文本编码

于 2015-01-25T03:20:07.763 回答
6

Spring For Delphi 项目 - http://www.spring4d.org - 实现了许多 SHAxxx 散列、MD5 散列以及许多 CRC 函数

于 2014-01-17T13:59:43.007 回答
5

如果您只想使用字典,而不是在寻找安全性,那么:
在 Delphi 2009 及更高版本中,可以使用以下命令创建字符串的哈希值

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

其中 Value 是一个字符串。

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

于 2011-09-14T06:15:32.237 回答
4

您还可以将 WindowsCrypto API 与 Delphi 一起使用:

那里有一个包含所有 CryptoAPI 的单元。您还可以使用现在开源的 Lockbox。

最后,您可以使用 Delphi 支持几乎任何哈希算法。Indy 示例可能是您在 Delphi 中最接近本机的示例,因为大多数版本的 Delphi 都包含 Indy。对于其余部分,您将需要使用库或编写更多代码来访问 CryptoAPI 或自己实现它。

于 2008-09-12T16:41:06.920 回答
4

TurboPower 密码箱支持:

  • MD-5,
  • SHA-1 和
  • 整个 SHA-2 系列,包括最近发布的 SHA-512/224 和 SHA-512/256 哈希。
于 2011-12-14T13:21:13.400 回答
1

使用 ICS,您只需调用位于 OverbytecsMD5 单元中的 StrMD5 函数。

除了该特定功能之外,还有更多适用于其他数据类型和场景的 MD5 功能。还有其他哈希方法,例如 SHA。

于 2020-03-09T14:26:39.910 回答