10.6.0.4975 - ОЧЕНЬ старая версия Indy 10. Текущая версия - 10.6.2.5485.Вам нужно обновить.
В любом случае Indy 10 имеет встроенные реализации MD5 и SHA-1, которые вообще не полагаются на какую-либо внешнюю библиотеку хеширования.Но SHA-512 делает.Тем не менее, вы не указываете Indy, какую библиотеку хеширования использовать, такую как OpenSSL.Вы не указываете Indy загружать библиотеки DLL OpenSSL, чтобы он мог инициализировать себя для использования функциональности OpenSSL SHA-512.Таким образом, sha512->IsAvailable
возвращает false, а sha512->HashStringAsHex()
возвращает пустую строку 1 .
Это четко указано в принятом ответе на вопрос, который вы связали с :
Indy предоставляет реализацию, использующую функции хеширования из OpenSSL.Чтобы использовать его, вы можете:
добавить модуль IdSSLOpenSSLHeaders
в предложение uses
, а затем вызвать его Load()
функцию во время выполнения.
добавить модуль IdSSLOpenSSL
в предложение uses
, а затем вызвать его LoadOpenSSLLibrary()
функцию во время выполнения.
В этом случае, так каквы используете C ++ вместо Pascal, вам нужно вместо этого добавить в ваш код соответствующий оператор #include
, либо #include <IdSSLOpenSSLHeaders.hpp>
или #include <IdSSLOpenSSL.hpp>
, и затем вы можете вызвать соответствующую функцию Load
, например, в конструкторе вашей формы.
1: Кстати, вы должны использовать IndyTextEncoding_ASCII()
вместо IndyTextEncoding(TEncoding::ASCII)
.