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支持最流行的算法:
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)
Sch*_*eeg 11
我通常使用David Barton(天空之城)的DCPCrypt2(Delphi Cryptography Package).
它还包含以下加密算法:
Warren PostmaDCPCrypt现在维护更新,可在此处找到源代码.
为什么不使用system.HashRTL 中的单元,它也包含自 Delphi Seattle 以来的 MD5 哈希算法?
MD5HashCode := THashMD5.GetHashString(ClearTextString);
Run Code Online (Sandbox Code Playgroud)
如果您只想使用字典,而又不想寻找安全性,那么:
在Delphi 2009及更高版本中,可以使用以下命令创建字符串的哈希值:
BobJenkinsHash(Value, Length(Value) * SizeOf(Value), 0)
其中Value是一个字符串。
http://docwiki.embarcadero.com/VCL/en/Generics.Defaults.BobJenkinsHash
这是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.优点是您还可以指定文本编码