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