这个问题已经有答案了:
TidHashSHA512.isavailable is false on Windows 10(1个答案)
21天前关闭。
我用这个代码来尝试它,我需要得到这样的网站https://sha512.online/的结果
use IdHash,IdHashSHA;
function TForm1.SHA512(const AString: string): string;
var LSHA512: TIdHashSHA512;
begin
LSHA512 := TIdHashSHA512.Create;
try
Result := LSHA512.HashStringAsHex(AString);
finally
LSHA512.Free;
end;
end;
但是它在LSHA512.HashStringAsHex行引发了一个Access Violation错误。谢谢
2条答案
按热度按时间lf3rwulv1#
您没有检查以确保
TIdHashSHA512.IsAvailable
是True
* 在 * 使用TIdHashSHA512.HashStringAsHex()
之前,例如:SHA-512(以及大多数其他加密算法)不是内置于Indy中的,因此
TIdHashSHA512.IsAvailable
默认返回False
。要使其返回True
,IdFIPS
单元中的IsHashingIntfAvail
和IsSHA512HashIntfAvail
函数指针需要连接到实际实现SHA-512的库/API,例如OpenSSL(通过IdSSLOpenSSLHeaders
单元)。HashStringAsHex()
本身需要将相应的函数分配给GetSHA512HashInst
、UpdateHashInst
和FinalHashInst
函数指针。举例来说:
由于 Delphi 7只支持Windows开发,如果你不想依赖第三方库,微软的Crypto API在现代Windows版本上确实支持SHA-512,所以你可以选择在代码中编写一些函数来调用Crypto API,然后将这些函数分配给
IdFIPS
函数指针,例如:olqngx592#
您可以使用以下库之一: