gpt4 book ai didi

delphi - Delphi 2010 中的 TIdHashSHA1.HashStream 是否损坏?

转载 作者:行者123 更新时间:2023-12-02 05:55:29 24 4
gpt4 key购买 nike

经过痛苦的调试 session 后,我发现 TIdHashSHA1.HashStream 不尊重其 ASize 参数。考虑以下代码:

var
Hasher: TIdHashSHA1;
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
Hasher := TIdHashSHA1.Create;
try
MS.LoadFromFile('C:\windows\notepad.exe');
MS.Position := 0;
ShowMessage(Hasher.HashStreamAsHex(MS));
MS.Position := 0;
ShowMessage(Hasher.HashStreamAsHex(MS, 0, MS.Size - 10));
finally
Hasher.Free;
MS.Free;
end;
end;

结果是一样的。这是一个错误还是我做错了什么?如果这确实是一个错误,那么在不复制我想要散列的流部分的情况下绕过它的最简单方法是什么?

最佳答案

您认为 TIdHashSHA1(具体来说,TIdHashSHA1.NativeGetHashBytes() 方法)忽略 ASize 参数是正确的。它从输入流中读取数据,直到读取的字节数少于 64 个字节,无论这需要多长时间。这似乎确实是一个需要修复的错误。阅读的内容不应超过实际要求的内容。我已经为此在 Indy 的 bug 跟踪器中开了票。

由于该错误与实际进行数据哈希处理的方法相同,因此在我发布官方修复之前,您可以采取的唯一解决方法是在 中自行修复 NativeGetHashBytes() >IdHashSHA.pas 然后重新编译 Indy(或者,如果您没有使用运行时包,您可以制作 IdHashSHA.pas 的本地副本并将其添加到您的项目中,然后修复复制)。

关于delphi - Delphi 2010 中的 TIdHashSHA1.HashStream 是否损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20225940/

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