PHP hash_hmac不匹配AWS签名4例如 [英] PHP hash_hmac not matching AWS Signature 4 example
问题描述
我有一个问题,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),美东-1),IAM),aws4_request)
$符号= hash_hmac('SHA256','AWS4wJalrXUtnFEMI / K7MDENG + bPxRfiCYEXAMPLEKEY','20110909',真正的);
$符号= hash_hmac('SHA256',$符号,'美东1,真正的);
$符号= hash_hmac('SHA256',$符号,IAM,真正的);
$符号= hash_hmac('SHA256',$符号,'aws4_request,真正的);
$符号= str_split($符号);
回声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($符号为$ T)
回声ORD($ T)。 '';
正确的格式是相反的:
< PHP
// wJalrXUtnFEMI / K7MDENG + bPxRfiCYEXAMPLEKEY
// HMAC(HMAC(HMAC(HMAC(AWS4+ kSecret,20110909),美东-1),IAM),aws4_request)
$符号= hash_hmac('SHA256','20110909','AWS4wJalrXUtnFEMI / K7MDENG + bPxRfiCYEXAMPLEKEY,真正的);
$符号= hash_hmac(SHA256,美国 - 东 - 1',$符号,真正的);
$符号= hash_hmac(SHA256,IAM,$符号,真正的);
$符号= hash_hmac('SHA256','aws4_request',$符号,真正的);
$符号= str_split($符号);
回声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($符号为$ T)
回声ORD($ T)。 '';
这给定的字符串匹配的精美。希望这可以帮助别人!
I'm having an issue with hash_hmac and AWS signature version 4. I'm using the example they laid out here: http://docs.aws.amazon.com/general/latest/gr/sigv4-calculate-signature.html
The output is from the AWS website. I want to match it, I can't seem to see what I'm doing wrong. They wanted binary output and that's what I provide in each step.
Here is my test file:
<?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) . ' ';
The correct format is reverse:
<?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) . ' ';
This matches the given string beautifully. Hope this helps someone!
这篇关于PHP hash_hmac不匹配AWS签名4例如的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!