Попытка цифровой подписи через HMAC-SHA1 с PHP

Я пытаюсь настроить некоторые действия API Google Maps Premier, и для этого мне нужно подписать мои URL-адреса для аутентификации. Если вы переходите к примерам подписи, есть код Python, C # и Java, чтобы показать вам, как сделать подпись через HMAC-SHA1. Также есть пример, чтобы я мог проверить свою реализацию PHP. Однако я просто не могу заставить его работать.

Вот мой код:

$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="; 

Когда, я запускаю это, я получаю подпись:

 ZDRlNGMwZjIyMTA1MWM1Zjk0Nzc4M2NkYjlmNDQzNDBkYzk4NDI4Zg== 

Который полностью не соответствует.

Вещи, о которых я подумал:

  1. Ключ находится в модифицированном URL-кодированном формате, поэтому изменение - и _ до + и / также не работает
  2. Код примера Python действительно работает, поэтому это допустимый пример.
  3. Полностью переписываем нашу кодовую базу в python вместо PHP (я унаследовал ее).

У вас есть 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 доступен по адресу http://gmaps-samples.googlecode.com/svn/trunk/urlsigning/UrlSigner.php-source

Я предполагаю, что вы пытаетесь подписать url для OAuth?

Попробуйте эту библиотеку: http://code.google.com/p/oauth/