码迷,mamicode.com
首页 > Windows程序 > 详细

关于 Delphi 7 中文MD5的问题

时间:2020-04-11 13:24:09      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:message   字符   cdc   包含   版本   md5   version   value   roc   

使用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(中文));

 

关于 Delphi 7 中文MD5的问题

标签:message   字符   cdc   包含   版本   md5   version   value   roc   

原文地址:https://www.cnblogs.com/rtcmw/p/12678595.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!