PHP

2010-06-26 17 views
9

के साथ एचएमएसी-एसएचए 1 के माध्यम से डिजिटल हस्ताक्षर करने का प्रयास कर रहा हूं, मैं कुछ Google मानचित्र प्रीमियर एपीआई एक्शन स्थापित करने की कोशिश कर रहा हूं, और ऐसा करने के लिए, मुझे प्रमाणित करने के लिए अपने यूआरएल पर हस्ताक्षर करने की आवश्यकता है। यदि आप हस्ताक्षर उदाहरणों पर जाते हैं, तो कुछ पायथन, सी # और जावा कोड है जो आपको दिखाता है कि एचएमएसी-एसएचए 1 के माध्यम से हस्ताक्षर कैसे करें। एक उदाहरण भी है ताकि मैं अपने PHP कार्यान्वयन का परीक्षण कर सकूं। हालांकि, मैं इसे काम करने के लिए प्रतीत नहीं कर सकता।PHP

ZDRlNGMwZjIyMTA1MWM1Zjk0Nzc4M2NkYjlmNDQzNDBkYzk4NDI4Zg== 

कौन सा पूरी तरह से मेल नहीं खाती:

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

करते हैं, तो मैं इस चलाने के लिए, मैं के हस्ताक्षर प्राप्त करें:

यहाँ मेरी कोड है।

बातें मैं बारे में सोचा है:

  1. कुंजी, संशोधित URL इनकोडिंग प्रारूप में है तो + और / को - और _ बदलते भी
  2. अजगर उदाहरण कोड वास्तव में काम करता है काम नहीं करता है, तो यह एक वैध उदाहरण है।
  3. PHP के बजाय पायथन में हमारे कोड-बेस को पूरी तरह से फिर से लिखना (मैंने इसे विरासत में मिला)।

उत्तर

0

मुझे लगता है कि ओएथ के लिए यूआरएल पर हस्ताक्षर करने की आपकी कोशिश है?

इस पुस्तकालय बाहर का प्रयास करें: http://code.google.com/p/oauth/

20

आप कम से कम 2 की समस्याओं,

  1. गूगल विशेष 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), '+/', '-_'); 
+0

आपका कोड काम उपलब्ध है। मैं कसम खाता हूं कि मैंने मैन्युअल रूप से उन दो अक्षरों को स्विच करने की कोशिश की और अभी भी सही परिणाम नहीं देख सका। शायद यह सही नहीं था हालांकि। किसी भी मामले में, आपकी मदद के लिए धन्यवाद! :) – Conradaroma

+4

@ZZCoder आपका उदाहरण आज भी उपयोगी था - इसे लिखने के लिए धन्यवाद; हस्ताक्षर करना अमेज़ॅन एस 3 बाल्टी अनुरोध बहुत समान है। '$ हस्ताक्षर = rawurlencode (base64_encode (hash_hmac (" sha1 ", $ stringToSign, $ secret_access_key, true))); –

+0

कच्चेरनकोड फ़ंक्शन का उपयोग न करने पर S3 अपलोड के लिए गीक स्टॉक सुझाव काम करता है। इस अपलोड समाधान में अच्छी S3/PHP जानकारी है जिसका उपयोग कभी भी उनकी लाइब्रेरी का उपयोग किए बिना किया जा सकता है: http://www.plupload.com/docs/v2/Upload-to-Amazon-S3 – Exit