Delphi DEC 6.3调用CalcFile计算SHA3_384哈希弹出提示如何处理
问题结论与解决方案
1 提示对计算结果的影响
该提示不会影响哈希计算结果的正确性,你得到的计算结果和在线工具结果一致就可以验证这一点。提示触发的原因是代码调用流程存在冗余,触发了DEC库内部的状态校验提醒,没有破坏实际的哈希计算逻辑。
2 触发提示的原因
THash_SHA3_384的CalcFile是已经封装完成的完整计算方法,内部已经自动执行了Init、逐块计算、Done的全流程,你额外手动调用了Init和Done方法,在CalcFile执行完成后,哈希实例已经处于计算完成的挤压状态,此时再手动执行hash.Done就会触发状态校验不通过的提示。
3 代码修正方案
删除冗余的Init和Done调用即可,修正后的代码如下:
var HASH : THash_SHA3_384; s : rawbytestring; begin try HASH := THash_SHA3_384.Create; s := HASH.CalcFile(edFilename.Text,Tformat_HEX); EdHashedFile.Text := s; finally HASH.Free; end; end;
如果你需要分步计算(比如自己读取文件块逐段更新哈希),才需要手动调用Init、Update、Done流程,不要和封装好的CalcFile、CalcString这类全流程方法混用。
4 提示屏蔽方法
不建议直接屏蔽提示,这个提示本身是用于提醒你调用逻辑存在问题的,修正代码后提示会自动消失。如果确实需要临时屏蔽,可以修改DEC库的全局调试配置:将DEC_UseAssert的编译定义关闭,重新编译DEC库即可关闭这类校验提示。
内容的提问来源于stack exchange,提问作者Harry Rogers
相关产品推荐
相关产品推荐

