Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi TidHashSHA512.isavailable在Windows 10上为false_Delphi_Indy - Fatal编程技术网

Delphi TidHashSHA512.isavailable在Windows 10上为false

Delphi TidHashSHA512.isavailable在Windows 10上为false,delphi,indy,Delphi,Indy,我在Delphi XE2上使用该函数来散列字符串 如果程序在Windows 10上运行,我会得到一个糟糕的结果-结果是null,因为tidhasha512.isavailable是FALSE 我该怎么办 function HashSHA512String(Text: String): String; var IdHashSHA512: TIdHashSHA512; begin Result := ''; if HashFunctionsOpenSSLLoaded then begin

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

如果程序在Windows 10上运行,我会得到一个糟糕的结果-结果是
null
,因为
tidhasha512.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;
函数HashSHA512String(文本:String):String;
变量
IdHashSHA512:TIdHashSHA512;
开始
结果:='';
如果HashFunctionsPensslLoaded,则开始

如果tidhasha512.IsAvailable,那么开始//大部分Indy的SHA哈希依赖于你的应用程序将外部哈希库连接到Indy。目前只有SHA-1(在其他几个非SHA散列中)是本机实现的

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

  • ishashingintfail
  • UpdateHashInst
  • FinalHashInst
  • IsSHA512HashIntfAvail
  • GetSHA512HashInst
只要将上述函数指针分配给合适的函数,就可以使用任何所需的哈希库

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

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

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


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

请格式化代码块以使其更具可读性。非常感谢,这就是问题所在。使用2个DLL,它正在运行