Windows 10上的TidHashSHA512.isavailable为false

时间:2017-11-19 17:02:00

标签: delphi indy

我在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;

1 个答案:

答案 0 :(得分:4)

大多数Indy的SHA哈希取决于您的应用程序将外部哈希库连接到Indy。目前只有SHA-1(在其他一些非SHA哈希中)本机实现。

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

  • IsHashingIntfAvail
  • UpdateHashInst
  • FinalHashInst
  • IsSHA512HashIntfAvail
  • GetSHA512HashInst

只要将上述函数指针分配给合适的函数,就可以使用任何所需的散列库。

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

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

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

无论哪种方式,您都必须使用您的应用程序(libeay32.dll和ssleay32.dll,您可以从Indy's Fulgan mirror下载)分发两个OpenSSL DLL。请务必使用已启用SHA-512编译的构建。