KeyDerivation.Pbkdf2和Rfc2898DeriveBytes有什么区别?

5

MSDN中的KeyDerivation:

使用PBKDF2算法执行密钥派生。

MSDN中的Rfc2898DeriveBytes:

通过使用基于HMACSHA1的伪随机数生成器实现基于密码的密钥派生功能PBKDF2。

这两个方法不是一样的吗?我们可以在两种方法中设置哈希算法。


这对您有帮助吗?在C#中使用SHA256作为摘要的Rfc2898 / PBKDF2 - kelalaka
1
@kelalaka,它帮助我理解也许没有区别?以前,PBKDF2只能使用SHA-1加密,但现在它提供了一个构造函数来以任何可能的方式进行加密,这就引出了这个确切的问题——两者之间有什么区别吗? - SpiritBob
最初,它们之间没有区别,因为它们都实现了Rfc2898DeriveBytes,该算法使用SHA1,这在它们各自的手册页面上有提到。如果您拥有开发环境,检查它们应该很容易。 - kelalaka
@kelalaka 确实,一旦我有时间,我会这样做,并在它们确实相同或由于某种原因它们最终不同的情况下更新答案。我将简单地为两个类使用相同的哈希算法、盐、字节数组等,并比较它们生成的值。 - SpiritBob
1个回答

1

两个函数的作用相同(当使用相同参数时,它们生成相同的加密密钥)。

它们设计上唯一的区别是,Rfc2898DeriveBytes 提供了更多的加密算法,而 KeyDerivation 提供的算法较少,也需要下载包。(除非我搞错了,否则仅在 ASP.NET/ASP.NET Core 中预装。)

从性能角度来看(基准测试是我的自己做的),在某个点上,KeyDerivation 曾经快得多,特别是在SHA-1 计算方面,但在连续测试了10到15分钟后,它们似乎达到了平衡,所以我无法确定哪个更有效率。我可以说的是,你需要为 Rfc2898DeriveBytes 进行额外的赋值,然后立即处理或在应用程序的生命周期内重复使用,而 KeyDerivation 在使用中不需要任何仪式。当然,这是以其有限的算法为代价的。

如果您不断处理并实例化一个新的 Rfc2898DeriveBytes(不重复使用,由于无法更改提供的密码,这在90%的情况下是不可能的),我认为KeyDerivation会快得多。(我的基准测试显示速度下降了50%。)

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