我正在基于从SymmetricAlgorithm继承的类(例如TripleDes,DES等)开发一种加密功能。

基本上,有两种方法可以为我的算法类PasswordDeriveBytesRfc2898DeriveBytes生成一致的密钥和IV,它们均继承自DeriveBytes抽象类。

在.NET框架中,PasswordDeriveBytes.GetBytes()方法被标记为过时,而建议使用Rfc2898DeriveBytes.GetBytes(),因为它与PBKDF2标准匹配。但是,根据我的测试,在Rfc2898DeriveBytes类中调用相同的GetBytes()方法几乎比在PasswordDeriveBytes类中调用它慢15倍,这会导致意外的CPU使用率(始终高于50%)。

这里是一些测试数据:


迭代次数:100
算法类型:DES
原始文本:“我是测试密钥,请加密我”
时间:


PasswordDeriveBytes:99ms
Rfc2898衍生字节:1,373ms



根据测试,Rfc2898DeriveBytes的不良性能在生产环境中是不可接受的。

有没有人注意到这个问题?我仍然可以使用标准解决方案而不影响性能吗?使用过时的方法有任何风险(可以在以后的版本中删除)吗?

多谢你们!

编辑:

可能是我发现问题出在哪里... PasswordDeriveBytes的默认迭代计数为100,而Rfc2898DeriveBytes的默认迭代计数为1000。将它们更改为与1000相同的数字后,执行Rfc2898DeriveBytes只是两次。

最佳答案

此博客文章讨论了两者之间的区别:http://blogs.msdn.com/shawnfa/archive/2004/04/14/generating-a-key-from-a-password.aspx

关于.net - PasswordDeriveBytes与Rfc2898DeriveBytes,已过时,但速度更快,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1356899/

10-11 18:17