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 ネイティブ、SHA1 はありますが、SHA2 などはありません (法律のためだと思いますが、わかりません...)

于 2015-02-28T04:00:26.350 に答える