2012-08-06 60 views
1
$signData = hash_hmac("sha1", 'GET\n1344250030\n/contacts.json', 
       base64_decode($this->api_secret)); 

$signData = base64_encode($signData); 

api_secret的值是hash_hmac - sha1 - 有符號值出錯了?

LPq6ZD2JdyPnBvxf6p6h 

結果的價值$ signData是

ZTYxM2NkYmNhZDJiZDUxZWUwMWIyNGRlZTlmYTc3MDliM2FiY2NhYQ ==

但在$ signData該預期的結果

QbOd8%2BOIzHMKrmEpf4G%2FZFWLAx8%3D

我應該使用URL連接該預期的結果。

我在哪裏做錯了?幫我。

+0

hash_hmac在默認情況下返回一個十六進制字符串,看到您對可能期望爲二進制的結果使用base64編碼。您可以通過將true作爲hash_hmac的第四個參數來獲得此信息。但它不會給你期望的結果。你爲什麼期望這個價值,你能告訴我們更多關於它的信息嗎? – Eelke 2012-08-06 11:11:46

+0

@Eelke hash_hmac每次返回相同的值還是不同的值?我期望的確定的價值,因爲只有該值是獲得適當的URL連接..這是從java hmac_sha1生成的值.. – user1578749 2012-08-06 11:34:50

+0

每次相同的價值(對於相同的課程輸入)。你能展示那個java代碼嗎? – Eelke 2012-08-06 11:38:11

回答

0

製造注意到了一個完整的Java程序

package javaapplication1; 

import java.net.URLEncoder; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.crypto.Mac; 
import javax.crypto.spec.SecretKeySpec; 
import org.apache.commons.codec.binary.Base64; 

public class JavaApplication1 { 

    public static void main(String[] args) { 
     try { 
      System.out.println(signData("GET\n1344250030\n/contacts.json")); 
     } catch (Exception ex) { 
      Logger.getLogger(JavaApplication1.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    private static String signData(String data) throws Exception { 
     Mac mac = Mac.getInstance("HmacSHA1"); 
     mac.init(new SecretKeySpec(Base64.decodeBase64("LPq6ZD2JdyPnBvxf6p6h"), "HmacSHA1")); 
     String sig = new String(Base64.encodeBase64(mac.doFinal(data.getBytes()))); 
     return URLEncoder.encode(sig, "UTF-8"); 
    } 
} 

的URLEncoder的,所以我補充說,到PHP。還懷疑你的網址應該使用雙引號,否則\ n不起作用。這給了這個代碼:

<?php 

$signData = hash_hmac("sha1", "GET\n1344250030\n/contacts.json", 
       base64_decode('LPq6ZD2JdyPnBvxf6p6h'), true); 
$signData = base64_encode($signData); 
echo urlencode($signData); 

都給出相同的結果,但不是你的預期。

fH%2F0XJpooui3U2nyd%2FCD9YjRVGM%3D 

那麼你確定你的輸入是正確的嗎? URL和祕密?

+0

明白了..我沒有編碼的網址..多數民衆贊成在哪裏我錯過了..謝謝 – user1578749 2012-08-06 12:11:59