2012-11-08 34 views
5

Aşağıdaki C# kodunu PHP'ye dönüştürmek istiyorum.Bu C# kodlama kodunun PHP karşılığı nedir?

C#: Ben bu dönüştü ettik

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

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

:

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

Ben: Bence

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

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

olmalıdır:

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

Ya

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

Ama belli değil

, bu ikinci kodlamayı fark Encoding.UTF8 değil UTF8Encoding.UTF8 kullanır.

PHP kodu neye benzemeli?

+2

'UTF8Encoding.UTF8' ve' Encoding.UTF8 'eşdeğerdir. 'UTF8Encoding'' Encoding''den miras aldığından, sonuç olarak 'UTF8' özelliği elde edilir. Yazım hatası düzeltildi - için –

cevap

3

PHP dizeleri zaten (tür) byte[], php kodlama konusunda herhangi bir bilinci yoktur. utf8_encode aslında ISO-8859-1'i UTF-8'e dönüştürür, bu yüzden burada gerekli değildir.

Bu dizeler dosyanızda birer sözcük ise, bu dosyanın yalnızca UTF-8 kodlamasıyla kaydedilmesi gerekir.

Geçiş true olanlar utf8_encode aramalar hash_hmac olarak 4 parametreye ve çıkarın: Ayrıca

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

, dize birleştirme operatörü böylece, . geçerli:

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

teşekkürler. Hala kimlik doğrulama değil, ama kodunuzu iyi olduğunu düşünüyorum & ek sorunlarımız var – jmadsen

+0

@jmadsen evet, 'C# tamamlanmadı. Bu satırdan önce: "var apiKey =" ABC-DEF1234 "; var authInfo = apiKey + ":" + hash', 'hash' hala bir byte []' dır, bu yüzden bir dizeye nasıl birleştirilebilir? – Esailija

İlgili konular