如何使用Delphi散列字符串?

dev*_*fix 24 delphi hash md5 cryptography

如何使用Delphi创建字符串的MD5哈希?

dev*_*fix 27

如果您需要MD5摘要并安装了Indy组件,则可以执行以下操作:

uses SysUtils, IdGlobal, IdHash, IdHashMessageDigest;

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

Delphi Cryptography Package支持最流行的算法:

  • 哈弗
  • MD4,MD5
  • RipeMD-128,RipeMD-160
  • SHA-1,SHA-256,SHA-384,SHA-512,

Warren PostmaDCPCrypt现在维护更新,可在此处找到源代码.


STB*_*and 16

如果您希望将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;
Run Code Online (Sandbox Code Playgroud)

  • +1用于添加使用单位:) (3认同)

Sch*_*eeg 11

我通常使用David Barton(天空之城)的DCPCrypt2(Delphi Cryptography Package).

它还包含以下加密算法:

  • 河豚
  • 演员128
  • 投256
  • DES,3DES
  • 冰,薄冰,冰2
  • 理念
  • 火星
  • MISTY1
  • RC2,RC4,RC5,RC6
  • Rijndael(新的AES)
  • Twofish的

Warren PostmaDCPCrypt现在维护更新,可在此处找到源代码.


Sch*_*Ltd 8

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

MD5HashCode := THashMD5.GetHashString(ClearTextString);
Run Code Online (Sandbox Code Playgroud)

  • 因为11年前,这个单位还不存在。;-) 对于使用更现代的 Delphi 版本的人来说,这是一个很好的提示。 (3认同)

Ari*_*The 6

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


mjn*_*mjn 5

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

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

其中Value是一个字符串。

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

  • 请注意,这不是* cryptographic *散列函数(这意味着它适用于散列表等),但请勿将其用于数据签名等。 (4认同)

Sta*_*anE 5

这是devstopfix的答案的修改,已被接受.

在当前的Indy版本中,您可以更轻松地散列字符串和流.例:

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

使用HashString,HashStringAsHex,HashBytes,HashBytesAsHex,HashStream,HashStreamAsHex.优点是您还可以指定文本编码