gpt4 book ai didi

indy - SHA 256 与 Indy

转载 作者:行者123 更新时间:2023-12-01 19:59:55 25 4
gpt4 key购买 nike

我尝试使用SHA-256加密功能,但没有成功。

我需要获取字符串和文件的哈希值。我使用 Delphi 10.1 Berlin 和 Indy for Hash。

我的代码:

uses System.Classes, IdHashSha, System.SysUtils;

function GetHashF(_filename: string): string;
var
sha: TIdHashSHA256;
fs: TFileStream;
begin
if TIdHashSHA256.IsAvailable then
begin
sha:= TIdHashSHA256.Create;
try
fs:= TFileStream.Create(_filename, fmOpenRead);
try
Result:= sha.HashStreamAsHex(fs);
finally
sha.Free;
end;
finally
fs.Free;
end;
end;

function GetHashS(_string: string): string;
var
sha: TIdHashSHA256;
begin
if TIdHashSHA256.IsAvailable then
begin
sha:= TIdHashSHA256.Create;
try
Result:= sha.HashStringAsHex(_string);
finally
sha.Free;
end;
end;
end;

但每当我这样做时,它都会为这两个函数返回一个干净的字符串(“”)。
我使用断点来检查它是否从 IsAvaible 传递,但事实并非如此。 这是怎么回事?

最佳答案

目前,Indy 仅本地实现了一些哈希算法,但不包括 SHA-256(我有 created a ticket 用于该功能)。

对于未本地实现的算法,Indy 允许您 Hook 您选择的外部哈希实现以提供实际的哈希功能。您会看到 IsAvailable 返回 false,因为您尚未完成该连接。

您可以使用任何所需的哈希实现,只要将适当的包装函数分配给 IdFIPS 单元中的以下回调即可:

IsHashingIntfAvail
UpdateHashInst
FinalHashInst

特别是对于 SHA-256,还:

GetSHA256HashInst
IsSHA256HashIntfAvail

默认情况下,Indy 可以使用 OpenSSL 作为哈希库:

  • IdSSLOpenSSLHeaders 单元添加到 uses 子句

  • 在运行时调用IdSSLOpenSSLHeaders.Load()

  • 使用您的应用可执行文件部署 OpenSSL 二进制文件。

IdSSLOpenSSLHeaders.pasIdFIPS 回调 Hook 相关 OpenSSL 函数。

关于indy - SHA 256 与 Indy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43173249/

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