2012-11-08 114 views
5

我想將以下C#代碼轉換爲PHP。這個C#編碼代碼的PHP等價物是什麼?

C#的是:

byte[] operation = UTF8Encoding.UTF8.GetBytes("getfaqs"); 
byte[] secret = UTF8Encoding.UTF8.GetBytes("Password"); 

var hmac = newHMACSHA256(secret); 
byte[] hash = hmac.ComputeHash(operation); 

我已經變成這樣:

$hash = hash_hmac("sha256", utf8_encode("getfaqs"), utf8_encode("Password")); 

然後,我有:

var apiKey = "ABC-DEF1234"; 
var authInfo = apiKey + ":" + hash 

//base64 encode the authorisation info 
var authorisationHeader = Convert.ToBase64String(Encoding.UTF8.GetBytes(authInfo)); 

我想這應該是:

$authInfo = base64_encode($apiKey . ":" . $hash); 

或者

$authInfo = base64_encode(utf8_encode($apiKey . ":" . $hash)); 

但不能肯定,注意到這個第二編碼使用Encoding.UTF8,不UTF8Encoding.UTF8。

PHP代碼應該是什麼樣子?

+2

'UTF8Encoding.UTF8'和'Encoding.UTF8 '是等同的。 'UTF8Encoding'從'Encoding'繼承,因此它獲得了'UTF8'屬性。 –

回答

3

PHP字符串已經(種)byte[],PHP沒有任何編碼意識。 utf8_encode實際上將ISO-8859-1變成UTF-8,所以在這裏不需要。

如果這些字符串是文件中的文字,那麼該文件只需要以UTF-8編碼進行保存。

通行證truehash_hmac作爲第四個參數,並刪除這些utf8_encode電話:

$hash = hash_hmac("sha256", "getfaqs", "Password", true); 

此外,字符串連接運算符是.,所以:

$authInfo = base64_encode($apiKey . ":" . $hash); 
+0

感謝您的錯字糾正。仍然不認證,但我認爲你的代碼是好的,我們還有其他問題 – jmadsen

+0

@jmadsen是的,'C#'不完整。在這行之前:var apiKey =「ABC-DEF1234」; var authInfo = apiKey +「:」+ hash','hash'仍然是'byte []',那麼它如何連接到一個字符串呢? – Esailija

相關問題