PHP哈希_hmac不匹配AWS签名4示例

PHP哈希_hmac不匹配AWS签名4示例,php,amazon-web-services,Php,Amazon Web Services,我对hash_hmac和AWS签名版本4有问题。我正在使用他们在这里列出的示例: 输出来自AWS网站。我想匹配它,我似乎看不出我做错了什么。他们需要二进制输出,这就是我在每个步骤中提供的 这是我的测试文件: <?php // wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY // HMAC(HMAC(HMAC(HMAC("AWS4" + kSecret,"20110909"),"us-east-1"),"iam"),"aws4_request") $si

我对hash_hmac和AWS签名版本4有问题。我正在使用他们在这里列出的示例:

输出来自AWS网站。我想匹配它,我似乎看不出我做错了什么。他们需要二进制输出,这就是我在每个步骤中提供的

这是我的测试文件:

<?php

// wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY
// HMAC(HMAC(HMAC(HMAC("AWS4" + kSecret,"20110909"),"us-east-1"),"iam"),"aws4_request")

$sign = hash_hmac('sha256', 'AWS4wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY', '20110909', true );
$sign = hash_hmac('sha256', $sign, 'us-east-1', true );
$sign = hash_hmac('sha256', $sign, 'iam', true );
$sign = hash_hmac('sha256', $sign, 'aws4_request', true );
$sign = str_split( $sign );

echo "152 241 216 137 254 196 244 66 26 220 82 43 171 12 225 248 46 105 41 194 98 237 21 229 169 76 144 239 209 227 176 231\n";

foreach( $sign as $t )
    echo ord($t) . ' ';

正确的格式是相反的:

<?php

// wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY
// HMAC(HMAC(HMAC(HMAC("AWS4" + kSecret,"20110909"),"us-east-1"),"iam"),"aws4_request")

$sign = hash_hmac('sha256', '20110909', 'AWS4wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY', true );
$sign = hash_hmac('sha256', 'us-east-1', $sign, true );
$sign = hash_hmac('sha256', 'iam', $sign, true );
$sign = hash_hmac('sha256', 'aws4_request', $sign, true );
$sign = str_split( $sign );

echo "152 241 216 137 254 196 244 66 26 220 82 43 171 12 225 248 46 105 41 194 98 237 21 229 169 76 144 239 209 227 176 231\n";

foreach( $sign as $t )
    echo ord($t) . ' ';

如果您更改函数中参数的顺序,您将得到相同的结果,这是正确的。AWS SDK for PHP的相关部分位于此处:您好,谢谢您的回答,它工作正常。然而,当我将它连接到我的浏览器上载脚本时,我仍然发现问题。你能看看我的帖子吗?请分享你的见解?