PHP

2010-06-26 13 views
9

ile HMAC-SHA1 üzerinden dijital olarak oturum açmaya çalışıyorum Bazı Google Haritalar Premier API eylemini kurmaya çalışıyorum ve bunu yapmak için URL'leri kimlik doğrulaması yapmak üzere imzalamam gerekiyor. İmza örneklerine giderseniz, HMAC-SHA1 aracılığıyla imzayı nasıl yapacağınızı göstermek için bazı Python, C# ve Java kodu vardır. PHP uygulamamı test edebilmem için de bir örnek var. Ancak, sadece işe almak için görünmüyor olabilir. Tamamen uymuyorPHP

ZDRlNGMwZjIyMTA1MWM1Zjk0Nzc4M2NkYjlmNDQzNDBkYzk4NDI4Zg== 

: Bunu çalıştırdığınızda, ben bir imza almak

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

:

İşte benim kod.

şeyler ben düşündüm:

  1. anahtar öylesine da
  2. Python örnek kod aslında nasıl çalışır çalışmaz + ve / için - ve _ değişen, Modifiye URL kodlu formatta olduğunu, Yani bu geçerli bir örnektir.
  3. PHP yerine python'daki kod tabanımızı tamamen yeniden yazdım (devraldım).

cevap

20

Sen 2 sorunları en azından

  1. Google'dan özel URL güvenli Base64 kullanır var. Normal base64_decode çalışmıyor.
  2. SHA1'i ikili olarak oluşturmanız gerekir.

bu deneyin,

$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), '+/', '-_'); 
+0

mevcuttur. Yemin ederim ki bu iki karakteri elle değiştirmeye çalıştım ve hala doğru sonucu göremedim. Belki de bu doğru değildi. Her durumda yardımlarınız için teşekkürler! :) – Conradaroma

+4

@ZZCoder Örneğiniz bugün hala kullanışlıdır - yazdığınız için teşekkürler; Amazon S3 kova isteklerinin imzalanması çok benzer. $ imza = rawurlencode (base64_encode (hash_hmac ("sha1", $ stringToSign, $ secret_access_key, true))); ' –

+0

S3 yüklemeleri için Geek Hisse önerisi, rawurlenkod işlevi kullanılmadığında çalışır. Bu yükleme çözümü, kütüphanelerini hiç kullanmadan kullanılabilecek iyi bir S3/PHP bilgisine sahiptir: http://www.plupload.com/docs/v2/Upload-to-Amazon-S3 – Exit