作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 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;
最佳答案
大多数 Indy 的 SHA 哈希值取决于您的应用程序将外部哈希库连接到 Indy。当前仅本地实现了 SHA-1(以及其他一些非 SHA 哈希值)。
要启用 SHA-512,必须在运行时分配 IdFIPS
单元中的以下回调函数指针:
IsHashingIntfAvail
UpdateHashInst
FinalHashInst
IsSHA512HashIntfAvail
获取SHA512HashInst
您可以使用任何您想要的哈希库,只要将上述函数指针分配给合适的函数即可。
Indy 提供了一个使用 OpenSSL 散列函数的实现。要使用它,您可以:
将 IdSSLOpenSSLHeaders
单元添加到 uses
子句中,然后在运行时调用其 Load()
函数。
将 IdSSLOpenSSL
单元添加到 uses
子句中,然后在运行时调用其 LoadOpenSSLLibrary()
函数。
无论哪种方式,您都必须将两个 OpenSSL DLL 与您的应用程序一起分发(libeay32.dll 和 ssleay32.dll,您可以从 Indy's Fulgan mirror 下载)。请务必使用已启用 SHA-512 的编译版本。
关于delphi - TidHashSHA512.isavailable 在 Windows 10 上为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47379509/
我是一名优秀的程序员,十分优秀!