4

为什么 TIdHMACSHA256+ (Indy/delphi) 的 HashValue 函数总是返回空?例如,下面的代码不起作用。

var
  Hash: TIdHMACSHA256 ;
  HashValue: TBytes;
begin
  SetCurrentDir(ExtractFilePath(ParamStr(0)));
  Hash := TIdHMACSHA256 .Create;
  try
    Hash.Key := TEncoding.ASCII.GetBytes('devaee2');
    HashValue := Hash.HashValue(TFile.ReadAllBytes('menu.xml'));
    // HashValue is an empty array, why?
    Tag := Length(HashValue);
    TFile.WriteAllBytes('menu.xml.hash', HashValue);

  finally
    FreeAndNil(Hash);
  end;
end;
4

3 回答 3

8

问题是您没有成功加载实现哈希所需的 OpenSSL 库。打电话IdSSLOpenSSL.LoadOpenSSLLibrary。您还需要确保您的程序可以找到合适的 OpenSSL DLL。

于 2012-12-05T15:42:17.190 回答
3

快速查看 Indy 10 源,他们没有编码 SHA256-512r 哈希,而是使用某种系统哈希 (??)。请检查 TIdHashSHA256.IsAvailable - 它很可能会返回 false。

于 2012-12-05T15:48:15.580 回答
0

查找组件 TDCP(尝试https://bitbucket.org/wpostma/dcpcrypt2010)。源码完整。在 Rad Studio 2007 上运行良好......来自 Delphi 的 XE5 Native,你有 SHA1 但没有 SHA2 和其他(我认为是因为法律,或者我不知道......)

于 2015-02-28T04:00:26.350 回答