当前位置:  开发笔记 > 编程语言 > 正文

文件MD5校验和

如何解决《文件MD5校验和》经验,为你挑选了2个好方法。

在这个问题中提到了wcrypt2.

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

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

谢谢!



1> 小智..:

这是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;

此致,OscaR1



2> Ricardo Acra..:

基于@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;


要将哈希值转换为十六进制字符串,您还可以使用:TIdHashMessageDigest5.AsHex(hash);
这段代码实际上适用于indy 9?绝对不是10.
推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有