文件MD5校验和

Ric*_*ras 4 delphi md5 delphi-7

这个问题中提到了wcrypt2.

我需要的只是计算文件的MD5.如果我可以计算它而不必保存它将是完美的,因为它是以流格式下载的文件.

我想有最直接的方式来做到这一点.

谢谢!

小智 13

这是Indy 10的工作代码:

function MD5File(const FileName: string): string;
var
  IdMD5: TIdHashMessageDigest5;
  FS: TFileStream;
begin
 IdMD5 := TIdHashMessageDigest5.Create;
 FS := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
 try
   Result := IdMD5.HashStreamAsHex(FS)
 finally
   FS.Free;
   IdMD5.Free;
 end;
end;
Run Code Online (Sandbox Code Playgroud)

此致,OscaR1


Ric*_*ras 5

基于@dummzeuch answere我写了这个函数:

function getMD5checksum(s: TStream): string;
 var
  md5: TIdHashMessageDigest5;
  hash : T4x4LongWordRecord;
 begin
  md5 := TIdHashMessageDigest5.Create;
  s.Seek(0,0);
  hash := md5.HashValue(s);
  result := IntToHex(Integer(hash[0]), 4) +
            IntToHex(Integer(hash[1]), 4) +
            IntToHex(Integer(hash[2]), 4) +
            IntToHex(Integer(hash[3]), 4);
 end;
Run Code Online (Sandbox Code Playgroud)

  • 要将哈希值转换为十六进制字符串,您还可以使用:TIdHashMessageDigest5.AsHex(hash); (2认同)
  • 这段代码实际上适用于indy 9?绝对不是10. (2认同)