2011-12-21 248 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教程。