如何使用Delphi对字符串进行MD5哈希处理?
如果要MD5摘要并安装了Indy组件,则可以执行以下操作:
1 2 3 4 5 6 7 8
| uses SysUtils, IdGlobal, IdHash, IdHashMessageDigest;
with TIdHashMessageDigest5.Create do
try
Result := TIdHash128.AsHex(HashValue('Hello, world'));
finally
Free;
end; |
Delphi密码包中支持最受欢迎的算法:
-
哈瓦尔
-
MD4,MD5
-
MD128,,160
-
SHA-1,SHA-256,SHA-384,SHA-512,
-
虎
更新资料
DCPCrypt现在由Warren Postma维护,可以在此处找到源。
如果要将MD5哈希字符串设置为十六进制,并且已安装Delphi XE 1,则可以使用Indy 10.5.7组件,可以执行以下操作:
uses IdGlobal, IdHash, IdHashMessageDigest;
1 2 3 4 5 6 7 8 9 10 11 12
| 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; |
我通常使用David Barton(天空之城)的DCPCrypt2(Delphi密码软件包)。
它还包含以下加密算法:
-
河豚
-
演员表128
-
演员256
-
DES,3DES
-
冰,薄冰,冰2
-
理念
-
火星
-
迷雾1
-
RC2,RC4,RC5,RC6
-
Rijndael(新的AES)
-
蛇
-
茶
-
fish鱼
更新资料
DCPCrypt现在由Warren Postma维护,可以在此处找到源。
这是对devstopfix答案的修改,已被接受。
在当前的Indy版本中,您可以更轻松地对字符串和流进行哈希处理。例:
1 2 3 4 5 6 7 8 9
| function MD5String(str: String): String;
begin
with TIdHashMessageDigest5.Create do
try
Result := HashStringAsHex(str);
finally
Free;
end;
end; |
使用HashString,HashStringAsHex,HashBytes,HashBytesAsHex,HashStream,HashStreamAsHex。好处是您还可以指定文本编码
如果您只想使用字典,而您并不是在寻找安全性,那么:
在Delphi 2009及更高版本中,可以使用以下命令创建字符串的哈希值
BobJenkinsHash (Value, Length(Value) * SizeOf(Value), 0)
其中Value是一个字符串。
http://docwiki.embarcadero.com/VCL/en/Generics.Defaults.BobJenkinsHash
为什么不使用RTL中的system.Hash单元,该单元也包含自Delphi Seattle起的MD5哈希算法?
1
| MD5HashCode := THashMD5.GetHashString(ClearTextString); |
Spring For Delphi项目-http://www.spring4d.org-实现了许多SHAxxx散列,MD5散列以及许多CRC函数
TurboPower密码箱支持:
-
MD-5,
-
SHA-1和
-
整个SHA-2系列,包括最近发布的SHA-512 / 224和SHA-512 / 256哈希。
您还可以将WindowsCrypto API与Delphi一起使用:
那里有一个包装所有CryptoAPI的单元。您还可以使用Lockbox(现已开放源代码)。
最后,您可以使用Delphi支持几乎所有的Hash算法。 Indy示例可能是您在Delphi中最接近本机的示例,因为大多数版本的Delphi中都包含Indy。对于其余部分,您将需要使用库或编写更多代码来访问CryptoAPI或自己实现。
使用ICS,您只需调用位于OverbytecsMD5单元中的StrMD5函数即可。
除了该特定功能外,还有许多其他数据类型和场景的MD5功能。还有其他哈希方法,例如SHA。