温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c# - What's the difference between KeyDerivation.Pbkdf2 and Rfc2898DeriveBytes?
.net-core c# hash security

c# - KeyDerivation.Pbkdf2和Rfc2898DeriveBytes有什么区别?

发布于 2020-03-28 23:30:02

MSDN中的KeyDerivation:

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

MSDN中的Rfc2898DeriveBytes:

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

这些东西不是吗?我们可以在两种方法中设置哈希算法。

查看更多

查看更多

提问者
SpiritBob
被浏览
148
SpiritBob 2020-01-31 18:30

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

它们设计上的唯一区别在于,它Rfc2898DeriveBytes提供了更多的加密算法,而KeyDerivation提供的算法更少,并且还是需要下载的软件包。(除非我没有记错,否则仅预存在于ASP.NET/ASP.NET Core中。)

从性能的角度来看(基准是我自己的),在某一点KeyDerivation上速度要快得多,尤其是在SHA-1计算中,但是在连续测试10到15分钟后,它们似乎趋于平衡,所以我不能真正说出哪个更高效。我可以说的是,您需要为分配额外的资源Rfc2898DeriveBytes,您可以立即将其分配或在应用程序的整个生命周期内重新使用,而KeyDerivation在使用过程中不需要任何仪式。当然,这是以其有限的算法为代价的。

如果您不断地处置和实例化一个新的实例Rfc2898DeriveBytes(由于无法更改所提供的密码,因此90%的时间没有重复使用),那么我相信KeyDerivation它会快得多。(我的基准测试显示速度降低了50%。)