2012-06-24 75 views
1

我正在編寫一個腳本來與twitter進行交流 - 除了生成正確的簽名以外,一切看起來都很好,我在那裏遇到訪問錯誤。但是,改變我的變量以匹配twitter文檔中的變量會產生不同的結果。在https://dev.twitter.com/docs/auth/creating-signature底部,它說:爲什麼我生成的OAuth簽名與Twitter的不同?

For example, the output given the base string and signing key 
given on this page is 
     B6 79 C0 AF 18 F4 E9 C5 87 AB 8E 20 0A CD 4E 48 A9 3F 8C B6 

我的代碼產生幾乎同樣的事情 - 只是沒有空格和小寫。然而,當我BASE64_ENCODE(),我沒有得到相同的值文檔(tnnArxj06cWHq44gCs1OSKk/jLY=)中,即使有不同的情況下/間距的/ etc努力:

echo base64_encode('B679C0AF18F4E9C587AB8E200ACD4E48A93F8CB6'); 
echo strtolower(base64_encode('B679C0AF18F4E9C587AB8E200ACD4E48A93F8CB6')); 
echo base64_encode('B6 79 C0 AF 18 F4 E9 C5 87 AB 8E 20 0A CD 4E 48 A9 3F 8C B6'); 
echo base64_encode(strtolower('B6 79 C0 AF 18 F4 E9 C5 87 AB 8E 20 0A CD 4E 48 A9 3F 8C B6')); 

由於:

QjY3OUMwQUYxOEY0RTlDNTg3QUI4RTIwMEFDRDRFNDhBOTNGOENCNg== 
qjy3oumwquyxoey0rtldntg3qui4rtiwmefdrdrfndhbotngoencng== 
QjYgNzkgQzAgQUYgMTggRjQgRTkgQzUgODcgQUIgOEUgMjAgMEEgQ0QgNEUgNDggQTkgM0YgOEMgQjY= 
YjYgNzkgYzAgYWYgMTggZjQgZTkgYzUgODcgYWIgOGUgMjAgMGEgY2QgNGUgNDggYTkgM2YgOGMgYjY= 

我在這裏錯過了很明顯的東西嗎

+0

Base64編碼可能是不區分大小寫。 –

+0

「[..]甚至嘗試不同的大小寫/間距/等[..]」 – LeonardChallis

回答

2

您對Base64有誤解。

Base64獲取任意值(0-255)的字節數組,並使用數字0-9,A-Z,a-z和+和/將這些字節編碼爲可打印的數據字符串。

正如base10使用數字0-9,base2使用0和1,base64使用字母表中的字符來表示數字。 base64中的Aa不同。因此,在base64編碼的字符串上使用strtolower()不會產生任何喜悅。

好的。現在回到Twitter的,他們說結果是:

B6 79 C0 AF 18 F4 E9 C5 87 AB 8E 20 0A CD 4E 48 A9 3F 8C B6 

這些都是十六進制數字。這不是base64編碼的值。如果你base64它,你會得到其他東西(更多數據要遵循)。

如果你把它放入一個字符串,並嘗試base64編碼字符串,你將再次失敗。 Twitter並不是說「這是你應該得到的字符串」。這就是說,這是你應該得到的字節數組。

Furshtay?


此代碼

$p = pack("C*", 0xB6, 0x79, 0xC0, 0xAF, 0x18, 0xF4, 0xE9, 0xC5, 0x87, 
      0xAB, 0x8E, 0x20, 0x0A, 0xCD, 0x4E, 0x48, 0xA9, 0x3F, 0x8C, 0xB6); 
$b64 = base64_encode($p); 
echo "base64: " . $b64 . "\n"; 

產量:

base64: tnnArxj06cWHq44gCs1OSKk/jLY= 
+0

啊 - 所以我可以從hash_hmac()和base64_encode()得到* raw *輸出。 :d – LeonardChallis

1

您首先需要打開十六進制字符串轉換成二進制:

$bin = pack('H*', 'B679C0AF18F4E9C587AB8E200ACD4E48A93F8CB6'); 
var_dump(base64_encode($bin) === 'tnnArxj06cWHq44gCs1OSKk/jLY='); 
相關問題