这是对我有用的德尔福代码。只需更改参数的值以适合您的目的并输入您自己的密钥。我将时间戳设置为现在加上 2.4 小时 - 更改它以适合您自己的目的。
procedure TForm1.ButtonWorksClick(Sender: TObject);
var
toHash, SecretAccessKey, dirstr, awssignature, sg, ts, link: String;
sig: T160BitDigest;
SystemTime1: SYSTEMTIME;
dt1: TDateTime;
begin
GetSystemTime(SystemTime1);
dt1 := SystemTimeToDateTime(SystemTime1) + 0.1;
ts := '&Timestamp=' + HTTPEncode(FormatDateTime('yyyy"-"mm"-"dd"T"hh":00:00.000Z', dt1));
tohash := 'GET' + Chr(10) + 'ecs.amazonaws.com' + Chr(10) + '/onca/xml' + Chr(10) +
'AWSAccessKeyId=AKIAID6DSLQQRYN3MDQA&AssociateTag=locboo01-20&Keywords=031238792X&Operation=ItemSearch&SearchIndex=Books' +
'&Service=AWSECommerceService&SignatureMethod=HmacSHA1&SignatureVersion=2' + ts + '&Version=2011-08-01';
SecretAccessKey := 'Your secret key here';
Sig := cHash.CalcHMAC_SHA1(SecretAccessKey, tohash);
dirstr := cHash.SHA1DigestAsString(Sig);
awssignature := EncdDecd.EncodeString(dirstr);
sg := HTTPApp.HTTPEncode(awssignature);
link := 'http://ecs.amazonaws.com/onca/xml' + '?' +
'AWSAccessKeyId=AKIAID6DSLQQRYN3MDQA&AssociateTag=locboo01-20&Keywords=031238792X&Operation=ItemSearch&SearchIndex=Books' +
'&Service=AWSECommerceService&SignatureMethod=HmacSHA1&SignatureVersion=2' + ts + '&Version=2011-08-01' + '&Signature=' + sg;
Clipboard.AsText := link;
Memo1.Lines.Add(sg);
end;