2012-11-08 32 views
5

Tôi muốn biến mã C# sau thành PHP.PHP tương đương với mã mã hóa C# này là gì?

C# là:

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

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

Mà tôi đã biến thành này:

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

Sau đó, tôi có:

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

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

Mà tôi nghĩ nên là:

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

Hoặc

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

Nhưng không chắc chắn, hãy chú ý mã hóa thứ hai này sử dụng Encoding.UTF8, không UTF8Encoding.UTF8.

Mã PHP nên trông như thế nào?

+2

'UTF8Encoding.UTF8' và' Encoding.UTF8 'là tương đương. 'UTF8Encoding' kế thừa từ' Encoding' để nó có được thuộc tính 'UTF8'. –

Trả lời

3

Chuỗi PHP đã (loại) byte[], php không có bất kỳ nhận thức mã hóa nào. utf8_encode thực sự chuyển ISO-8859-1 sang UTF-8, vì vậy không cần thiết ở đây.

Nếu các chuỗi đó là chữ trong tệp của bạn, tệp đó chỉ cần được lưu trong mã hóa UTF-8.

đèo true để hash_hmac tham số như 4 và loại bỏ những utf8_encode cuộc gọi:

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

Ngoài ra, nhà điều hành chuỗi nối là ., vì vậy:

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

cảm ơn vì đã đánh bắt lỗi chính tả. Vẫn chưa xác thực, nhưng tôi nghĩ rằng mã của bạn là tốt và chúng tôi có thêm vấn đề – jmadsen

+0

@jmadsen có, 'C#' chưa hoàn thành. Trước dòng này: 'var apiKey =" ABC-DEF1234 "; var authInfo = apiKey + ":" + hash', 'hash' vẫn là một' byte [] ', vậy làm thế nào nó có thể được nối với một chuỗi? – Esailija

Các vấn đề liên quan