C#密码学生成密钥

3
我正在尝试使用C#加密/解密字符串。我找到了很多有关如何执行此操作的教程,例如: 这个。但是大多数教程都假定您已经拥有密钥。所以我的问题是:

如何生成密钥?

谢谢您的帮助。


1
你可以要求用户输入密码短语。 - Ignacio Soler Garcia
3个回答

4
如果您正在使用 System.Security.Cryptography 命名空间中的加密类,请使用 Rfc2898DeriveBytes 类(@CodeInChaos 指出它取代了 PasswordDeriveBytes)从密码派生一个密钥。
如果需要随机密钥,则可以使用 SymmetricAlgorithm 类的 GenerateKey 方法。

我更喜欢使用 Rfc2898DeriveBytes http://msdn.microsoft.com/en-us/library/system.security.cryptography.rfc2898derivebytes.aspx - CodesInChaos
@CodeInChaos,你能简单概括一下为什么你会选择其中一个而不是另一个吗? - anton.burger
Rfc2898DeriveBytes 是 PBKDF2, PasswordDeriveBytes 是 PBKDF1。我认为2比1更好。 - CodesInChaos
好的,我进一步调查了一下,并在看到更多对新标准的引用后决定更新答案。 - anton.burger
2
有很好的理由避免使用PBKDF1,甚至更多的是微软在PasswordDeriveBytes中实现(扩展)它的方式,参见:http://stackoverflow.com/a/8459312/220643。 - poupou
@poupou 谢谢你详细讲解,非常有用的知识。 - anton.burger

2

这取决于您如何处理密钥。

如果您自动生成密钥并通过某个密钥交换方法在某个渠道上交换密钥,则应使用像RNGCryptoServiceProvider这样的强随机数生成器生成密钥。实际上.NET中的大多数密码都会自动生成随机密钥。

如果要使用某种用户输入的密码,则建议您使用Rfc2898DeriveBytes类。关于Rfc2898DeriveBytes也有一篇教程,可以在.NET安全博客上找到。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接