PHP hash_hmac不匹配AWS签名4例如 [英] PHP hash_hmac not matching AWS Signature 4 example

查看:263
本文介绍了PHP hash_hmac不匹配AWS签名4例如的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个问题,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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆