TidHashSHA512.isavailable is false on Windows 10



我在Delphi XE2上使用该函数来散列字符串。

如果程序在Windows 10上运行,我会得到一个坏结果——结果是null,因为TidHashSHA512.isavailableFALSE

我该怎么办?

function HashSHA512String(Text: String): String;
var
IdHashSHA512: TIdHashSHA512;
begin
Result := '';
if HashFunctionsOpenSSLLoaded then begin
if TIdHashSHA512.IsAvailable then begin // <-- ADD THIS
IdHashSHA512 := TIdHashSHA512.Create;
try
Result := IdHashSHA512.HashStringAsHex(Text);
finally
FreeAndNil(IdHashSHA512);
end;
end;
end;
end;

Indy的大多数SHA哈希都依赖于您的应用程序将外部哈希库连接到Indy。目前只有SHA-1(在少数其他非SHA散列中)是本机实现的。

要启用SHA-512,必须在运行时分配IdFIPS单元中的以下回调函数指针:

  • IsHashingIntfAvail
  • UpdateHashInst
  • FinalHashInst
  • IsSHA512HashIntfAvail
  • GetSHA512HashInst

您可以使用任何所需的哈希库,只要将上述函数指针分配给合适的函数即可。

Indy提供了一个使用OpenSSL中哈希函数的实现。要使用它,您可以:

  • IdSSLOpenSSLHeaders单元添加到uses子句中,然后在运行时调用其Load()函数。

  • IdSSLOpenSSL单元添加到uses子句中,然后在运行时调用其LoadOpenSSLLibrary()函数。

无论哪种方式,您都必须随应用程序分发两个OpenSSL dll(libeay32.dll和ssleay32..dll,您可以从Indy的Fulgan镜像下载)。请确保使用已在启用SHA-512的情况下编译的内部版本。

最新更新