8

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

4

3 回答 3

12

您可以使用GenerateIV(overridden in RijndaelManaged) 来生成 IV。然后,您可以将 IV 与密文一起传输。您可以认为 IV 有点像盐 - 基本上它可以防止每次将相同的明文加密为相同的密文。不要重复使用 IV - 这使它毫无意义。为每条消息生成一个新消息。

于 2010-03-27T19:32:25.693 回答
3
  1. 有一个特殊的功能可以从密码中获取密钥,我相信它比哈希更安全。您可能想查找 Rfc2898DeriveBytes 类。它需要一个Salt和一个密码。

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

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

于 2010-03-27T19:39:11.987 回答
2

Jon Skeet对 IV 的看法是正确的,但您获取密钥的方式也有问题。

仅对明文密码使用单轮 SHA256并不安全。它使系统容易受到简单的字典攻击。

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

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

于 2010-04-02T06:11:42.503 回答