SHA 256 与 Indy
SHA 256 With Indy
我正在尝试使用 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;
但每当我这样做时,它 returns 一个干净的字符串 ("") 用于两个函数。
我使用断点来检查它是否从 IsAvaible
传递,但不是。
怎么回事?
此时,Indy 只本地 实现了一些散列算法,但不包括 SHA-256(我有 created a ticket 的功能)。
对于非本机实现的算法,Indy 允许您挂钩您选择的外部哈希实现以提供实际的哈希功能。你看到 IsAvailable
return false 因为你还没有完成连接。
您可以使用任何您想要的哈希实现,只要您将适当的包装函数分配给 IdFIPS
单元中的以下回调:
IsHashingIntfAvail
UpdateHashInst
FinalHashInst
特别是对于 SHA-256,还有:
GetSHA256HashInst
IsSHA256HashIntfAvail
默认情况下,Indy 可以使用 OpenSSL 作为哈希库:
将 IdSSLOpenSSLHeaders
单位添加到您的 uses
子句中
在运行时调用 IdSSLOpenSSLHeaders.Load()
使用您的应用可执行文件部署 OpenSSL 二进制文件。
IdSSLOpenSSLHeaders.pas
为 IdFIPS
回调连接相关的 OpenSSL 函数。
我正在尝试使用 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;
但每当我这样做时,它 returns 一个干净的字符串 ("") 用于两个函数。
我使用断点来检查它是否从 IsAvaible
传递,但不是。
怎么回事?
此时,Indy 只本地 实现了一些散列算法,但不包括 SHA-256(我有 created a ticket 的功能)。
对于非本机实现的算法,Indy 允许您挂钩您选择的外部哈希实现以提供实际的哈希功能。你看到 IsAvailable
return false 因为你还没有完成连接。
您可以使用任何您想要的哈希实现,只要您将适当的包装函数分配给 IdFIPS
单元中的以下回调:
IsHashingIntfAvail
UpdateHashInst
FinalHashInst
特别是对于 SHA-256,还有:
GetSHA256HashInst
IsSHA256HashIntfAvail
默认情况下,Indy 可以使用 OpenSSL 作为哈希库:
将
IdSSLOpenSSLHeaders
单位添加到您的uses
子句中在运行时调用
IdSSLOpenSSLHeaders.Load()
使用您的应用可执行文件部署 OpenSSL 二进制文件。
IdSSLOpenSSLHeaders.pas
为 IdFIPS
回调连接相关的 OpenSSL 函数。