2011-12-21 203 views
3

我想用c#加密/解密一個字符串。我已經找到了無數的關於如何這個前例的教程:this然而,他們大多數人認爲你已經有了鑰匙。所以我的問題是:C#密碼生成密鑰

如何生成密鑰?

在此先感謝。

+1

如此簡單,你可以問用戶通過階段 – 2011-12-21 10:01:10

+0

? – Jonny 2011-12-21 10:02:14

+0

我會這麼說。 – 2011-12-21 10:10:01

回答

4

如果您在System.Security.Cryptography名稱空間中使用加密類,請使用Rfc2898DeriveBytes類(@CodeInChaos指出它取代PasswordDeriveBytes)從密碼派生密鑰。

如果一個隨機密鑰是OK,則SymmetricAlgorithm類具有GenerateKey方法。

+0

我喜歡'Rfc2898DeriveBytes' http://msdn.microsoft.com/en-us/library/system.security.cryptography.rfc2898derivebytes.aspx – CodesInChaos 2011-12-21 10:38:59

+0

@CodeInChaos,什麼是TL; DR版本爲什麼你會選擇一個在另一方面? – shambulator 2011-12-21 11:14:07

+0

'Rfc2898DeriveBytes'是PBKDF2,'PasswordDeriveBytes'是PBKDF1。我簡單地假設2比1好。 – CodesInChaos 2011-12-21 11:36:45

2

這取決於你處理的關鍵。

如果您自動生成密鑰,只需通過密鑰交換方法在某個通道上交換密鑰,那麼您應該使用一些強大的隨機數生成器(如RNGCryptoServiceProvider)生成密鑰。事實上,.NET中的大多數Cipher自動生成一個隨機密鑰。

如果你想有某種用戶輸入的密碼,那麼我建議你使用Rfc2898DeriveBytes類。還有關於Rfc2898DeriveBytes.NET Security blog教程。