2017-11-25 61 views
1
public static string GenerateHash(string password, string salt, int iterations) 
    { 
     var pbkdf2 = new Rfc2898DeriveBytes(password, Convert.FromBase64String(salt), iterations); 
     var keyBytes = pbkdf2.GetBytes(32); 
     return Convert.ToBase64String(keyBytes); 
    } 

我得到一個哈希密碼是用於一個zip檔案,但我不知道我是否實際上正確檢索哈希。這是在c#中的PBKDF2的正確實現

回答

1

嗯,我認爲這個問題的答案是:絕對是的。 爲了充分評估您的方法,有幾個缺失的部分會很有趣,特別是您如何構建鹽以及如何驗證密碼。

這是我會怎麼做:

public static String HashPassword(String password) 
{ 
    Byte[] salt = new Byte[24]; 

    RNGCryptoServiceProvider cryptoProvider = new RNGCryptoServiceProvider(); 
    cryptoProvider.GetBytes(salt); 

    Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(password, salt, 1000); 

    return Convert.ToBase64String(pbkdf2.GetBytes(20)); // Size of PBKDF2-HMAC-SHA-1 Hash 
} 
+0

我生成的鹽的方法是完全一樣有描述,只是在一個單獨的方法。 原因是我想將salt作爲註釋存儲在zip存檔中。 這樣,當我們的程序嘗試打開它時,它知道要添加到用戶的密碼中。 我認爲這是相當安全的? 我聽說一個暴露的鹽不是特別危險 – user5113199

+1

@ user5113199我不能評論這裏的具體情況,但一般來說鹽漬的目的是防止彩虹表,而不是使任何密碼「更安全」。所以從這個角度來看,鹽應該是公開的。請記住,解鎖zip文件是一個脫機過程,bruteforce可以在全功能下發生,因此瞭解salt *會減少攻擊者的複雜程度。 – poke

+1

@ user5113199 Salt的意思是公開的 - 存儲它們的常用方法是將它們預先加密到密文。所以瞭解鹽並不會降低安全性。 – ckuri