2011-12-03 65 views
4

我使用默認值爲我的網站使用ASP.NET MVC 3成員資格。因此用戶的會員密碼被安全地存儲。如何使用ASP.NET Membership安全地存儲服務密碼?

我的服務要求用戶輸入其使用的其他網絡服務的用戶名/密碼。我從我的服務中訪問這些服務。如果我保存用戶的服務密碼,我需要確保那些用戶名/密碼的安全存儲,以便如果有人攻擊我的服務器,他們將不會被暴露。

我瞭解如何完成這項工作的一般概念(使用他們提供的ASP.NET會員密碼的密鑰對用戶名/密碼進行加密)。但我不知道具體的API或正確的模式。

我也認爲這基本上是不可能的,因爲如果有人攻擊我的服務,他們可以簡單地使用散列本身來解密密碼。我說得對嗎?

假設我錯了,並且可以做我想做什麼,我的假設模型包含了這樣的事情:

public class MSExchangeSettings 
    { 
     [Required] 
     [DataType(DataType.EmailAddress)] 
     [Display(Name = "Email address for your Exchange account")] 
     public string EmailAddress { get; set; } 

     [Required] 
     [DataType(DataType.Password)] 
     [Display(Name = "Password for your Exchange account")] 
     public string Password { get; set; } 

     ... 
    } 

是否有人可以提供如何正確地做到這一點的例子嗎?

如果這是不可能的,我不得不求助於每一次我想避免的PW用戶。當然,對於使用支持OpenID或OAuth的服務,我還有其他選擇,但對於此特定示例(Exchange),我需要用戶名/密碼。

回答

-2

看看這個

private static string GetPasswordHashed(string password) { 

     var saltBytes = new byte[0x10]; 
     using (var random = new RNGCryptoServiceProvider()) { 
      random.GetBytes(saltBytes); 
     } 

     var passwordBytes = Encoding.Unicode.GetBytes(password); 

     var combinedBytes = saltBytes.Concat(passwordBytes).ToArray(); 

     byte[] hashBytes; 
     using (var hashAlgorithm = HashAlgorithm.Create("HashAlgorithm")) { 
      hashBytes = hashAlgorithm.ComputeHash(combinedBytes); 
     } 

     var PasswordHashed = Convert.ToBase64String(hashBytes); 
     return PasswordHashed; 
    } 
+0

我很欣賞你把這個發佈的時間。不過,我並不想簡單地輸入密碼。正如我上面所解釋的,我需要在我的服務中使用未經哈希處理的密碼,以便我可以使用其他服務進行身份驗證,例如Exchange。不過謝謝。 – tig

相關問題