迁移到新的数据库结构后,我可以保留散列密码吗?


Can I keep hashed passwords after a migration to a new databse structure?

我以前做过一个网站。原始php与SQL。现在我正在用CakePHP做一个新版本,这意味着我想要遵循很多约定,也就是说,我想尽可能地保持CakePHP的方式。

但:

有一个用户表,我试图在新版本上分成两个新的,添加字段和划分用户识别字段和使用统计字段,我仍然在寻找最好的方法来做到这一点,这不是主要问题,但任何帮助将不胜感激。为了适应约定,表名有所不同,字段也发生了变化。我还需要对此做一些研究。

旧站点使用sha1()来散列密码,我想知道是否有机会在不让所有用户再次注册的情况下保留记录。

我发现了一些破解技巧,比暴力破解更快。他们说他们更快,但我有大约1000个用户。此外,我不认为破解我的用户的密码,使我的工作更容易是合法的和道德的。所以开裂似乎是不可能的。

我想只是复制记录,并为他们设置一个"重置密码",这样他们就可以再次登录,并将代码发送到他们注册时提供的电子邮件中。这不是一个非常糟糕的选择,但只有在没有其他办法的情况下,我才愿意这样做。

嗯,有办法做到这一点吗?

即使您破解了SHA-1哈希,您也无法确定您找到的是真正的密码还是仅仅是一个碰撞。因此,您无法使用其他散列算法重新散列这些找到的密码。

无需重置密码,只需等待用户下次登录即可。

  1. 你可以先检查新的算法。
  2. 如果不匹配,将其与旧的SHA-1哈希进行比较。
  3. 如果旧的哈希值匹配,那么你可以计算和存储新的哈希值,因为你知道真实的密码。

每个密码存储系统都必须具有切换到更好的散列算法的选项,您的问题不是一次性迁移问题。像BCrypt这样的好的密码散列算法有一个成本因素,你必须不时地增加这个成本因素(因为更快的硬件),然后你需要完全相同的过程来迁移。

我真的建议切换到像BCrypt这样的慢速密钥派生函数,而不是像SHA-1甚至SHA-256这样的快速哈希算法,因为它们太快了,很容易被蛮力强制(2013年每秒3千兆的SHA-1值)。

如果您愿意,可以保留您现有的密码。只需为AuthComponent创建一个自定义的Authenticate类,并覆盖相关的方法来使用你想要的散列方案。

可以,您可以在新系统上重置密码或应用与以前相同的散列算法。