2010-03-26 112 views
0

我希望我的應用程序加密用戶密碼,並且一次性密碼將被解密以發送到服務器進行身份驗證。朋友建議我使用HMAC。我在C#中編寫了下面的代碼:C#HMAC執行問題

System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); 
byte[] key = encoding.GetBytes("secret"); 
HMACSHA256 myhmacsha256 = new HMACSHA256(key); 
byte[] hashValue = myhmacsha256.ComputeHash(encoding.GetBytes("text")); 
string resultSTR = Convert.ToBase64String(hashValue); 
myhmacsha256.Clear(); 

如何解碼密碼(resultSTR,在這種情況下)?

謝謝。

回答

5

HMAC(散列消息認證碼)不是加密的,它是散列函數(在這種情況下是SHA-256)加上一些密鑰。這是有損的,沒有辦法從HMAC派生明文。

如果你想加密一些祕密數據,你應該考慮使用ProtectedData類。包含示例代碼的更多信息在http://msdn.microsoft.com/en-us/library/system.security.cryptography.protecteddata.aspx

+0

如何將ProtectedData發送到服務器? – dtb 2010-03-26 22:07:46

+0

假設計算機位於同一個域中,您可以簡單地發送由ProtectedData返回的blob,並使用同一個帳戶解密blob。它們都是無縫的:) Windows中數據保護API(DPAPI)的設計目標之一就是在互聯網上裸露身體並且仍然受到保護。 :) – 2010-03-30 13:50:05