gpt4 book ai didi

amazon-web-services - 在Delphi 10.3中发出AWS Signature Version 4请求,将Python代码移植到Delphi

转载 作者:行者123 更新时间:2023-12-03 19:36:37 25 4
gpt4 key购买 nike

我正在尝试在Delphi中构建AWS Signature版本4请求。

我设法处理了签名部分,但是规范请求有一些问题

我正在按照下面的链接创建规范请求
https://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html

如果我在Python3中这样做,请参见下面的代码
我得到正确的答案
f536975d06c0309214f805bb90ccff089219ecd68b2577efef23edd43b7e1a59

我试图在德尔福做同样的事情

结果是错误代码
bfc216a33de74e30285fc72d6dd2035508e9aec861e5d56b59f4c1eb4f29ddc3

现在任何人如何在Delphi中执行以下Python行

PYTHON
canonical_request_hash = hashlib.sha256((canonical_request).encode('utf-8')).hexdigest()


得到这个结果
f536975d06c0309214f805bb90ccff089219ecd68b2577efef23edd43b7e1a59

PYTHON CODE
canonical_request = "GET\n"+"/\n"+"Action=ListUsers&Version=2010-05-08\n"+"content-type:application/x-www-form-urlencoded; charset=utf-8\n"+"host:iam.amazonaws.com\n"+ "x-amz-date:20150830T123600Z\n"+ "\n"+ "content-type;host;x-amz-date\n"+ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"


canonical_request_hash = hashlib.sha256((canonical_request).encode('utf-8')).hexdigest()

print(canonical_request_hash)


DELPHI
canonical_request := 'GET\n'+'/\n'+'Action=ListUsers&Version=2010-05-08\n';
canonical_request := canonical_request +'content-type:application/x-www-form-urlencoded; charset=utf-8\n'+'host:iam.amazonaws.com\n'+ 'x-amz-date:20150830T123600Z\n"+ "\n"+ "content-type;host;x-amz-date\n'+ 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855';

canonical_request_hashed := BytesToHexConverter ( THashSHA2.GetHashBytes(UTF8Encode( canonical_request ))); // Struggle

memo1.Lines.Add(canonical_request_hashed);
memo1.Lines.Add('f536975d06c0309214f805bb90ccff089219ecd68b2577efef23edd43b7e1a59');

//*********************

function TForm1.BytesToHexConverter(b: Tbytes): string;
var
I : Integer;
s : String;
begin
s:='';
for i := 0 to length(b)-1 do
begin
s:=s+b[i].ToHexString;
end;
s:= LowerCase(s);
result:=s;
End;



我期望这个结果在德尔福
f536975d06c0309214f805bb90ccff089219ecd68b2577efef23edd43b7e1a59
但是得到这个
bfc216a33de74e30285fc72d6dd2035508e9aec861e5d56b59f4c1eb4f29ddc3

最佳答案

您正在尝试根据AWS文档页面上显示的示例规范请求计算SHA256哈希。纯文本显示为:


得到
/
行动= ListUsers&Version = 2010-05-08
内容类型:application / x-www-form-urlencoded;字符集= utf-8
主持人:iam.amazonaws.com
x-amz-date:20150830T123600Z

内容类型;主机; x-amz日期
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855


您已成功将此纯文本转换为Python字符串,但由于以下两个原因而未能在Delphi中完成此操作:


您将Python代码复制粘贴到了Delphi,并用"替换了某些',但并非所有这些都可以作为问题下方的注释指出。
Delphi不允许在字符串文字中使用反斜杠转义。您只能通过键入两个单引号'来转义单引号''。您直接键入或使用# -prefixed character literals的所有其他字符。因此,您还应该将所有出现的\n转换为#10(换行符),并将其放在字符串文字之外。


正确转换为Delphi是:

canonical_request :=
'GET'#10 +
'/'#10 +
'Action=ListUsers&Version=2010-05-08'#10 +
'content-type:application/x-www-form-urlencoded; charset=utf-8'#10 +
'host:iam.amazonaws.com'#10 +
'x-amz-date:20150830T123600Z'#10 +
#10 +
'content-type;host;x-amz-date'#10 +
'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855';


最后,事实证明这不是标题中提到的 hexdigest()问题,而是将Python代码移植到Delphi的问题。

关于amazon-web-services - 在Delphi 10.3中发出AWS Signature Version 4请求,将Python代码移植到Delphi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57243893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com