Delphi中的HMAC-SHA256

Jac*_*cob 7 delphi hmac amazon-web-services

我需要为Amazon Web服务API生成HMAC-SHA256签名.旧的DCPcrypt库具有sha256例程,但不进行HMAC签名.有人知道我可以使用的免费哈希库吗?

Rem*_*eau 6

Delphi 附带安装了 Indy,并且 Indy 有一个TIdHMACSHA256类:

uses
  IdGlobal, IdHashSHA, IdHMAC, IdHMACSHA1, IdSSLOpenSSL;

function CalculateHMACSHA256(const value, salt: String): String;
var
  hmac: TIdHMACSHA256;
  hash: TIdBytes;
begin
  LoadOpenSSLLibrary;
  if not TIdHashSHA256.IsAvailable then
    raise Exception.Create('SHA256 hashing is not available!');
  hmac := TIdHMACSHA256.Create;
  try
    hmac.Key := IndyTextEncoding_UTF8.GetBytes(salt);
    hash := hmac.HashValue(IndyTextEncoding_UTF8.GetBytes(value));
    Result := ToHex(hash);
  finally
    hmac.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)


Jac*_*cob 4

经过更多搜索后,我发现了 OpenStreamSec - 它看起来几年前就被放弃了,但仍然可以在 D2007 中编译。

http://sourceforge.net/projects/openstrsecii/

为 Amazon 生成 HMAC-256 非常简单:

StrToMime64(HMACString(haSHA256, SecretKey, 32, DataToHash));
Run Code Online (Sandbox Code Playgroud)