我在Delphi XE2上使用该函数来散列字符串。
如果程序在Windows 10上运行,结果不好 - 结果为null
,因为TidHashSHA512.isavailable
为FALSE
。
我该怎么做?
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;
答案 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编译的构建。