尝试使用PHP通过HMAC-SHA1进行数字签名 [英] Trying to digitally sign via HMAC-SHA1 with PHP

查看:205
本文介绍了尝试使用PHP通过HMAC-SHA1进行数字签名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试设置一些Google Maps Premier API操作,为此,我需要对自己的URL进行签名以进行身份​​验证.如果您查看签名示例,则有一些Python,C#和Java代码向您展示如何通过HMAC-SHA1进行签名.还有一个示例,以便我可以测试我的PHP实现.但是,我似乎无法正常工作.

I'm trying to setup some Google Maps Premier API action, and to do so, I need to sign my URLs to authenticate. If you go down to Signature examples, there is some Python, C# and Java code to show you how to do the signature via HMAC-SHA1. There is also an example so that I can to test my PHP implementation. However, I just can't seem to get it to work.

这是我的代码:

$key = "vNIXE0xscrmjlyV-12Nj_BvUPaw=";

$data = "/maps/api/geocode/json?address=New+York&sensor=false&client=clientID";

$my_sign = hash_hmac("sha1", $data, base64_decode($key));
$my_sign = base64_encode($my_sign);

$valid_sign = "KrU1TzVQM7Ur0i8i7K3huiw3MsA=";

运行此命令时,我会得到以下签名:

When, I run this, I get a signature of:

ZDRlNGMwZjIyMTA1MWM1Zjk0Nzc4M2NkYjlmNDQzNDBkYzk4NDI4Zg==

完全不匹配.

我考虑过的事情:

  1. 密钥采用修改的URL编码格式,因此将-_更改为+/也不起作用
  2. Python示例代码确实可以工作,因此这是一个有效的示例.
  3. 完全用python而不是PHP重写我们的代码库(我继承了它).
  1. The key is in Modified URL encoded format, so changing - and _ to + and / also doesn't work
  2. The Python example code does indeed work, so this is a valid example.
  3. Completely rewriting our code-base in python instead of PHP (I inherited it).

推荐答案

您至少有2个问题,

  1. Google使用特殊的URL安全Base64.正常的base64_decode无法正常工作.
  2. 您需要以二进制形式生成SHA1.

尝试一下,

$key = "vNIXE0xscrmjlyV-12Nj_BvUPaw=";
$data = "/maps/api/geocode/json?address=New+York&sensor=false&client=clientID";
$my_sign = hash_hmac("sha1", $data, base64_decode(strtr($key, '-_', '+/')), true);
$my_sign = strtr(base64_encode($my_sign), '+/', '-_');

这篇关于尝试使用PHP通过HMAC-SHA1进行数字签名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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