Delphi 写入后TFileStream的MD5哈希不正确

Delphi 写入后TFileStream的MD5哈希不正确,delphi,md5,Delphi,Md5,我使用TIdHttp下载一个文件,然后使用TIdHashMessageDigest5检查其MD5哈希,如下所示: http := TIdHttp.Create(); fs := TFileStream.Create('mydownload.bin', fmCreate); md5 := TIdHashMessageDigest5.Create; http.Get(url, fs); http.Disconnect; md5Hex := md5.HashStreamAsHex(fs).ToLo

我使用TIdHttp下载一个文件,然后使用TIdHashMessageDigest5检查其MD5哈希,如下所示:

http := TIdHttp.Create();
fs := TFileStream.Create('mydownload.bin', fmCreate);
md5 := TIdHashMessageDigest5.Create;

http.Get(url, fs);
http.Disconnect;

md5Hex := md5.HashStreamAsHex(fs).ToLower;

// expected: 39704b0e2c1d704906d16c42260f45ef
// actual:   d41d8cd98f00b204e9800998ecf8427e
但是,如果我关闭TFileStream并重新打开它,MD5将如预期的那样:

http := TIdHttp.Create();
fs := TFileStream.Create('mydownload.bin', fmCreate);
md5 := TIdHashMessageDigest5.Create;

http.Get(url, fs);
http.Disconnect;

fs.Free;
fs := TFileStream.Create('mydownload.bin', fmOpenRead);

md5Hex := md5.HashStreamAsHex(fs).ToLower;

// expected: 39704b0e2c1d704906d16c42260f45ef
// actual:   39704b0e2c1d704906d16c42260f45ef

为什么会发生这种情况?

在计算哈希之前,需要将Filestream的位置设置为零

代码应该是这样的

http := TIdHttp.Create();
fs := TFileStream.Create('mydownload.bin', fmCreate);
md5 := TIdHashMessageDigest5.Create;

http.Get(url, fs);
http.Disconnect;

fs.Position := 0;
md5Hex := md5.HashStreamAsHex(fs).ToLower;

在计算哈希之前,需要将Filestream的位置设置为零

代码应该是这样的

http := TIdHttp.Create();
fs := TFileStream.Create('mydownload.bin', fmCreate);
md5 := TIdHashMessageDigest5.Create;

http.Get(url, fs);
http.Disconnect;

fs.Position := 0;
md5Hex := md5.HashStreamAsHex(fs).ToLower;

在计算md5之前,是否尝试将文件流的位置设置为0?@PhilippH。这就解决了问题!如果你想提供答案,我会接受。在计算md5之前,你是否尝试将文件流的位置设置为0?@PhilippH。这就解决了问题!如果你想提供答案,我会接受的。