题
解决方案
下面是用于印器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
其他提示
基于@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;
印附带功能,用于计算几个散列,MD5是其中之一。印地包含在自2006年德尔福和可用的免费下载的旧版本至少德尔福的所有版本。
约什么:
function GetFileMD5(const Stream: TStream): String; overload;
var MD5: TIdHashMessageDigest5;
begin
MD5 := TIdHashMessageDigest5.Create;
try
Result := MD5.HashStreamAsHex(Stream);
finally
MD5.Free;
end;
end;
function GetFileMD5(const Filename: String): String; overload;
var FileStream: TFileStream;
begin
FileStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
Result := GetFileMD5(FileStream);
finally
FileStream.Free;
end;
end;
正如你提到的, 您链接到的帖子 谈论 wcrypt2
, ,这是一个加密例程库,包括 MD5。您链接到的帖子似乎还表明它适用于Delphi 7,因为Asker包含标记为“ Delphi 7”的输出。你已经标记了这个问题 delphi7
, ,所以我假设这也是您正在使用的版本。那么是什么阻止你使用 wcrypt2
?
该问题链接到以下副本 wcrypt2.pas, ,并且该文件中的版权日期似乎表明该单元在 Delphi 7 发布时可用。检查您的安装;你可能已经拥有了。如果不是,那么该单位还说它是通过以下方式获得的 绝地计划, ,所以您也可以尝试在那里寻找该单位。
您所引用问题的答案包括示例 Delphi 代码以及 Delphi 附带的用于执行 MD5 的单元名称。它们随 Delphi 2009 一起提供,因此您应该检查它们是否也适用于您的版本。
看一看 MD5SUM的在Delphi此实现。它需要输入一个字符串,但我想,你可以很容易地将其与流工作。
MessageDigest_5 将这种正常工作。
我用在Delphi 7下面的函数与印10.1.5
uses IdHashMessageDigest, idHash, Classes;
...
function cc_MD5File(const p_fileName : string) : string;
//returns MD5 has for a file
var
v_idmd5 : TIdHashMessageDigest5;
v_fs : TFileStream;
v_hash : T4x4LongWordRecord;
begin
v_idmd5 := TIdHashMessageDigest5.Create;
v_fs := TFileStream.Create(p_fileName, fmOpenRead OR fmShareDenyWrite) ;
try
v_hash := v_idmd5.HashValue(v_fs);
result := v_idmd5.AsHex(v_hash);
finally
v_fs.Free;
v_idmd5.Free;
end;
end;
如果您使用Overbyte http://www.overbyte.eu/frame_index.html 只需添加单元,并调用函数FileMD5与文件的名称
uses OverbyteIcsMd5;
....
function GetMd5File:String;
begin
Result := FileMD5(FileName);
end;
不隶属于 StackOverflow