我正在尝试在Delphi中构建AWS签名版本4请求。
我设法处理签名部分,但对规范请求有一些问题
我按照下面的链接创建一个规范请求https://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html
如果我在Python3中执行此操作,请参见下面的代码,我将得到正确答案f536975d06c0309214f805bb90ccff089219ecd68b2577efef23edd43b7e1a59
我正试图在德尔福做同样的事情
结果是错误代码BFC216A33DE74E30285FC72D6DD2035508E9AE861E5D56B59F4C1EB4F29DDC3
现在有人在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;
我希望在delphi F536975D06C0309214F805BB90CCFF089219ECD68B257EFEF23EDD43B7E1A59中得到这个结果,但得到这个BFC216A33DE74E30285FC72D6DD2035508E9AE861E5D56B59F4C1EB4F29DDC3
您正试图从AWS留档页面上出现的示例炮制请求中计算SHA256哈希。纯文本如下:
获取
/
操作=列表用户
内容类型;主机;x-amz-date
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
您已成功地将此纯文本转换为Python字符串,但由于以下两个原因,在Delphi中未能实现此转换:
“
替换为”
,但并非如下面问题的注释所指出的全部。'
。您可以直接键入或使用带前缀的字符文本的所有其他字符。因此,您还应将所有出现的\n
转换为\10
(新行字符)并将其置于字符串文本之外德尔福的正确翻译为:
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的问题。
云: SDK版本:。 我想为我正在上传的对象进化对象锁定。 下面是我的代码,它正在生成signature 4标头,但我仍然无法解决该问题。 现在包含我的授权头的请求如下 AWS4-HMAC-SHA256凭据=xxxx/xx/us-East-1/s3/aws4_request, SignedHeaders=内容类型;x-amz-date; x-amz-对象-锁-法律-持有;x-amz-对象-锁-模式
" Life is pleasant. Death is peaceful. It’s the transition that’s troublesome. " — Isaac Asimov (attributed) 概述 几乎所有的Python 2程序都需要一些修改才能正常地运行在Python 3的环境下。为了简化这个转换过程,Python 3自带了一个叫做2to3的实用脚本(Utility S
null Edit2:为了一致性和正确性,将填充重命名为iVector。
问题内容: 我正在尝试将代码从使用Java 计时器移植到使用Scheduledexecutorservice 我有以下用例 我应该用ScheduledExecutorService替换A类和B类中的Timer实例,并使ATimerTask和BTimerTask类成为Runnable类,例如 这样对吗。 编辑:移植的主要动机之一是因为在TimerTask中引发的运行时异常会杀死一个线程,因此无法对其
此文档似乎有问题:http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-authentication-HTTPPOST.html 我一丝不苟地遵循它,它似乎确实奏效了。我总是收到签名不匹配错误。v2授权仍然有效。让我想知道这是否是某种阿尔法阶段质量的产品。 下面是我的php代码。我试图模仿本页中的示例:http://docs.aws.amazon
我想将用户配置文件图片存储在S3桶中,但保留这些图片的私密性。为了做到这一点,我正在创建一个预先签名的网址,每当图像是必需的。然而,这每次都会创建一个独特的网址,这意味着浏览器永远不会缓存图像,最终我会在GET请求中支付更多。 下面是生成url的代码示例,我使用的是Laravel: 我认为,通过指定日期时间而不是时间单位,它将创建相同的url,但实际上会将剩余秒数添加到url,下面是一个示例: x