我已经将我的网站改为Laravel,并使用他们存储密码的方法。
然而,我所有的旧用户密码都是使用salts以不同方式存储的。我最初的目标是通过一些代码简单地运行所有用户和他们的盐,以获得原始密码,然后通过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谢谢。
发布于 2014-12-28 09:08:55
由于散列是单向函数,您不能遍历数据库并将旧散列转换为新的Laravel (bcrypt)散列。
您可能需要实现两次身份验证,并在用户登录到新系统时移动用户。我建议添加一个数据库字段来表示密码是否已转换到新系统,并在此基础上使用两种登录机制。
根据电子邮件或用户名,在数据库中查找用户,看看他们使用的是旧的身份验证系统还是新的身份验证系统。如果是旧系统,请使用现有的身份验证检查密码,如果全部检查通过,则使用Auth::loginUsingId($userId)登录该用户。我们还有机会将用户升级到新的身份验证系统,因为在请求中仍然可以使用明文密码。通过Hash::make($plaintext)运行并存储它,并在auth version字段中记下用户已转换。
如果用户使用的是新的身份验证,请使用Hash::check($plaintext, $hashedPassword)检查密码,并像以前一样,使用Auth::loginUsingId($userId)登录。
您还可以查看extending Laravel,这样您就可以使用Auth::attempt()并让它确定在幕后使用哪种散列算法。
https://stackoverflow.com/questions/27672791
复制相似问题