1

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

但:

有一个用户表,我试图在新版本上拆分成两个新的,添加字段并划分用户标识字段和使用统计字段,我仍在寻找最好的方法来简单地做到这一点,这不是主要的问题,但任何帮助将不胜感激。表名称不同以适应约定,并且字段已更改。我仍然需要对此进行一些研究。

旧站点使用 sha1() 对密码进行哈希处理,我想知道是否有机会在不让所有用户再次注册的情况下保留记录。

我发现了一些比蛮力更快的破解技巧。好吧,他们说他们更快,但我有大约 1000 个用户。此外,我认为破解我的用户密码以简化我的工作既不合法也不道德。所以破解似乎是不可能的。

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

那么,有没有办法做到这一点?

4

3 回答 3

5

即使您会破解 SHA-1 哈希,您也无法确定您是否找到了真正的密码或只是一次冲突。所以你不能用不同的散列算法重新散列这些找到的密码。

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

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

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

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

于 2013-01-04T11:20:23.017 回答
3

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

于 2013-01-04T13:37:31.953 回答
1

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

于 2013-01-04T08:24:41.767 回答