关于 Delphi 7 中文MD5的问题
使用Indy自带的md5算法,代码如下:
uses IdHash, IdHashMessageDigest; function GetStringMD5(const AInPut: string): string; var MD5: TIdHashMessageDigest5; {$IF CompilerVersion<20.0} Digest: T4x4LongWordRecord; {$IFEND} begin MD5 := TIdHashMessageDigest5.Create; try {$IF CompilerVersion>20.0} // Delphi 2009 + Result := LowerCase(MD5.HashStringAsHex(AInPut)); {$ELSE} Digest := MD5.HashValue(AInPut); Result := LowerCase(MD5.AsHex(Digest)); {$IFEND} finally MD5.Free; end; end;
我们发现这个函数处理数字和英文是正确的,如果包含中文,则MD5值和其他语言对不上了,其实算法没问题,是编码的问题。一般MD5都是使用UTF8编码,使用的时候需要把字符串转换为UTF8编码:
ShowMessage(GetStringMD5(UTF8Encode(‘中文‘)));
MD5值为:a7bac2239fcdcb3a067903d8077c4a07
如果Delphi XE8 以上版本的System.Hash.THashMD5,就不需要UTF8转换了,内部已经做了转换:
procedure THashMD5.Update(const Input: string); begin Update(TEncoding.UTF8.GetBytes(Input)); end;
只要这样就可以了:
ShowMessage(System.Hash.THashMD5.GetHashString(‘中文‘));
相关推荐
二两天涯 2020-04-25
YukiRain 2020-04-11
RedCode 2020-03-05
zhiliang 2020-03-01
woxmh 2020-02-19
始终不够 2020-02-11
songfens 2020-02-01
kuwoyinlehe 2019-12-30
伏雌摘星阁 2019-12-24
始终不够 2019-12-17
oraclemch 2019-12-09
AndesStay 2019-12-09
phyzhou 2010-10-28
84251449 2019-11-05
misszc 2012-09-28
silenter00 2011-05-31
networkeye 2019-06-27
许学德 2019-06-21
stoutT 2008-05-14