【问题标题】:Getting raw passwords from a salt从盐中获取原始密码
【发布时间】:2015-02-24 16:34:02
【问题描述】:

我已将我的网站更改为 Laravel 并使用他们存储密码的方法。

但是,我所有的旧用户密码都使用盐以不同方式存储。我最初的目标是通过一些代码简单地运行所有用户和他们的盐以获取原始密码,然后通过 Laravel 进程运行它们。

但是,我无法弄清楚如何获取原始密码。生成盐和密码的代码给了我,在我知道太多之前就被剪切和粘贴了。

所以,创建用户密码的旧方法:

// Create a salt for password
$salt = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647)); 

// Hash for password
$password = hash('sha256', $_POST['password'] . $salt); 

// Next we hash the hash value 65536 more times...
for($round = 0; $round < 65536; $round++) 
{ 
  $password = hash('sha256', $password . $salt); 
}

然后登录时:

$check_password = hash('sha256', $_POST['password'] . $row['salt']); 
for($round = 0; $round < 65536; $round++) 
{ 
  $check_password = hash('sha256', $check_password . $row['salt']); 
}

是否有可能我必须撤消更改并获取原始密码?

如果需要测试,哈希密码和盐:

password: f7e98af40e141e8abdae42c6e4c3375ff7eede881678a07b18898724240035de
salt: 3eb9507334ff0ab2

谢谢。

【问题讨论】:

  • 没有。哈希是一种方式。
  • 原来如此,Plab B 就是这样。
  • @JohnConde 纽约市和 MTL 的大多数街道也是如此;-) 市中心
  • @Fred-ii- 非常正确!
  • 一个建议。您可以在用户表中添加一个名为 old_password 的字段,并将所有现有用户标记为 true。然后在您的身份验证中,如果它是旧密码,则以旧方式检查它,如果它是新用户,则将使用 Laravel 方法。我过去在框架迁移中成功地做到了这一点。祝你好运!

标签: php security hash passwords


【解决方案1】:

由于散列是一种单向函数,因此您无法通过数据库将旧散列转换为新的 Laravel (bcrypt) 散列。

您可能必须实施两次身份验证,并在用户登录到新系统时努力转移用户。我建议添加一个数据库字段来表示密码是否已转换为新系统,并在此基础上使用两种登录机制。

根据电子邮件或用户名,在数据库中查找用户,看看他们使用的是旧的还是新的身份验证系统。如果是旧系统,请使用您现有的身份验证检查密码,如果全部检查,请使用Auth::loginUsingId($userId) 登录用户。我们还有机会将用户升级到新的身份验证系统,因为明文密码在请求中仍然可用。通过Hash::make($plaintext) 运行它并存储它,并在auth version 字段中记下用户已转换。

如果用户正在使用新的身份验证,请使用Hash::check($plaintext, $hashedPassword) 来检查密码,并像以前一样使用Auth::loginUsingId($userId) 登录。

您还可以查看 extending Laravel,以便您可以使用 Auth::attempt() 并让它确定在后台使用哪种哈希算法。

【讨论】:

    【解决方案2】:

    我要做的是将数据迁移到新系统中,然后使新系统面向前端,然后向所有用户发送来自管理员帐户的密码重置请求(使用一些脚本)。这样他们就可以在新数据库中使用新系统的算法重置密码。

    这就像将密码重新注册到新数据库中一样。

    不管是什么盐,你都可以让用户重新输入密码。

    【讨论】:

      猜你喜欢
      • 2016-12-31
      • 2015-12-20
      • 1970-01-01
      • 1970-01-01
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      相关资源
      最近更新 更多