2009-03-30 8 views
8

đây là mã PHP của tôi:hmac_sha256 trong php và C# khác nhau

hash_hmac("sha256", utf8_encode($filename), utf8_encode($password)); 

và đây là mã C# của tôi:

var hmacsha256 = new HMACSHA256(Encoding.UTF8.GetBytes(password)); 
hmacsha256.ComputeHash(Encoding.UTF8.GetBytes(filename)); 

không may cả hai kết quả khác nhau. Bất cứ ai có thể cho tôi một gợi ý?

Trả lời

16

C# của tôi không phải là tốt nhất nhưng tôi đã nhận nó để làm việc, những gì bạn cần làm là để chuyển đổi kết quả mảng byte của bạn để hex.

PHP

$hash = hash_hmac("sha256", utf8_encode("Filename"), utf8_encode("Password")); 
echo $hash; 
// 5fe2ae06ff9828b33fe304545289a3f590bfd948ca9ab731c980379992ef41f1 

C#

string password = "Password"; 
string filename = "Filename"; 

var hmacsha256 = new HMACSHA256(Encoding.UTF8.GetBytes(password)); 
hmacsha256.ComputeHash(Encoding.UTF8.GetBytes(filename)); 

foreach(byte test in hmacsha256.Hash) 
{ 
    Console.Write(test.ToString("X2")); 
} 
// 5FE2AE06FF9828B33FE304545289A3F590BFD948CA9AB731C980379992EF41F1 
+0

Cảm ơn bạn - Tôi sẽ kiểm tra lại và trở về với bạn tối nay. Tôi đã sử dụng BitConverter.ToString (hmacsha256.Hash), nhưng tôi đã nhận được kết quả sai. – tanascius

+0

Bạn được chào đón :) –