我正在基于从SymmetricAlgorithm继承的类(例如TripleDes,DES等)开发一种加密功能。
基本上,有两种方法可以为我的算法类PasswordDeriveBytes
和Rfc2898DeriveBytes
生成一致的密钥和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/