Rijndael管理:IV代?

时间:2010-03-27 19:26:12

标签: c# cryptography rijndaelmanaged

我想在我的应用程序中实现最安全,最可靠的对称密钥加密形式。用户应该输入密码来加密/解密,这就是全部。对于RijndaelManaged,必须输入密钥和IV。我不确定如何处理这种情况。现在,我输入的密码被SHA256散列,然后被用作Rijndael的密钥。我用什么用于IV?另一个密码?

3 个答案:

答案 0 :(得分:11)

您可以使用GenerateIV(在RijndaelManaged中重写)来生成IV。然后,您可以将IV与密文一起发送。您可以将IV视为有点像盐 - 基本上它会阻止同一明文每次加密到相同的密文。不要重复使用IV - 这使它毫无意义。为每条消息生成一个新消息。

答案 1 :(得分:3)

  1. 从密码中获取密钥有一个特殊功能,我相信它比哈希更安全。您可能想要查看Rfc2898DeriveBytes类。它需要Salt和密码。

  2. 将未加密的IV(和Salt)添加到邮件中是一种公认​​的做法。

  3. 如果您创建Rijndaal类的实例,它会自动生成IV,发件人可以使用它。

答案 2 :(得分:2)

Jon Skeet关于IV是正确的,但是你导出密钥的方式也有问题。

在明文密码上使用单轮SHA256 安全。它使系统对简单的字典攻击开放。

有一类函数用于获取明文密码并从中创建密钥 - 这些是“密钥派生函数”。您应该使用其中一个 - PBKDF2是一个不错的选择 - 生成您的密钥。 Rfc2898DeriveBytes类实现了PBKDF2。

KDF将需要一个盐,每次随机生成盐,并与密文一起包括(就像IV一样)。