4

我刚刚开始熟悉加密和 .NET 框架。在查看了许多示例后,我发现使用 .NET Class 时会出现重复的模式Rfc2898DeriveBytes。当使用此类获取加密密钥和初始化向量时,似乎使用了相同的方法。

这是来自MSDN 博客的一些代码,演示了如何获取密钥和初始化向量。

byte[] salt = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 };
Rfc2898DeriveBytes pwdGen = new Rfc2898DeriveBytes("P@$$w0rd", salt, 1000);

// generate an RC2 key
byte[] key = pwdGen.GetBytes(16);
byte[] iv = pwdGen.GetBytes(8);

我在其他地方也看到过这个。我想我会认为它会是这样的......

// generate an RC2 key
byte[] key = pwdGen.GetKey();
byte[] iv = pwdGen.GetInitializationVector();

我一定在这里遗漏了一些东西。如果密钥和初始化向量 (IV) 只是随机数,那么在使用正确的密码和盐时如何再次获得它们?

4

1 回答 1

6

RFC2898 密钥派生算法是确定性的。当您使用相同的输入运行它时,您将获得相同的输出。

因此,只要您GetBytes()以相同的顺序调用,请求相同的字节数,您就会得到相同的密钥和 IV。

不要忘记,在真实系统中,盐应该在加密时随机生成(并存储以便可以在解密时检索)。

于 2011-03-25T01:44:50.967 回答