网上有很多与Rfc2898DeriveBytes相关的文件表明迭代次数应该每两年增加一次。我正在为应用程序设计一个新的数据库结构,以包含每个用户的散列和salt的迭代次数。确保所有密码在两年内更新为新迭代次数的最佳方法是什么? Rfc2898DeriveBytes构造函数只接受密码作为输入,而不是哈希。我对编写自己的函数有点谨慎,但是可以选择使用HMACSHA1吗?或者我是否只需要等待所有用户登录并重新使用它们,如果他们有旧的迭代?
答案 0 :(得分:2)
或者,我是否只需要等待所有用户登录并重新使用它们,如果他们有旧的迭代?
是的,这是正常的解决方案。
一旦传入用户提供的密码,保存的盐和保存的迭代计数,就会运行该函数。验证哈希匹配后,将用户具有的迭代计数与用于新密码的全局迭代计数进行比较。如果旧计数较低,则使用用户提供的密码,新盐 1 以及新的更高迭代计数再次运行该功能。然后,您将更新为该用户保存的哈希,盐和迭代计数。
要强制执行更新,您只需在服务器上的配置文件中有一个变量,每两年更改一次。当程序更改后程序重新启动时,会加载到用于新密码的全局迭代计数。当人们登录时,他们会获得新的迭代次数。
1:你不必做新的盐,但这并不会伤害任何事情。