gpt4 book ai didi

delphi - TFileStream 写入后 MD5 哈希不正确

转载 作者:行者123 更新时间:2023-12-01 23:35:16 26 4
gpt4 key购买 nike

我正在使用 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

为什么会发生这种情况?

最佳答案

在计算哈希值之前,需要将文件流的位置设置为零。

代码应该如下所示。

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;

关于delphi - TFileStream 写入后 MD5 哈希不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56864913/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com