【问题标题】:PHP hash_hmac not matching AWS Signature 4 examplePHP hash_hmac 不匹配 AWS 签名 4 示例
【发布时间】:2014-03-05 05:12:24
【问题描述】:

我遇到了 hash_hmac 和 AWS 签名版本 4 的问题。我正在使用他们在此处列出的示例:http://docs.aws.amazon.com/general/latest/gr/sigv4-calculate-signature.html

输出来自 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 amazon-web-services


【解决方案1】:

正确的格式是相反的:

<?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) . ' ';

这很好地匹配给定的字符串。希望这对某人有帮助!

【讨论】:

猜你喜欢
  • 2014-02-09
  • 1970-01-01
  • 2018-04-23
  • 2022-07-23
  • 1970-01-01
  • 2022-06-30
  • 1970-01-01
  • 1970-01-01
  • 2022-05-13
相关资源
最近更新 更多