Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从salt获取原始密码_Php_Security_Hash_Passwords - Fatal编程技术网

Php 从salt获取原始密码

Php 从salt获取原始密码,php,security,hash,passwords,Php,Security,Hash,Passwords,我已将我的网站改为Laravel,并使用他们存储密码的方法 然而,我所有的老用户密码都是用不同的盐存储的。我最初的目标是简单地通过一些代码运行所有用户和他们的salt,以获得原始密码,然后通过Laravel进程运行它们 但是,我不知道如何获取原始密码。生成salt和密码的代码是给我的,在我知道太多之前就被剪切粘贴了 因此,创建用户密码的旧方法是: // Create a salt for password $salt = dechex(mt_rand(0, 2147483647)) . dech

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

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

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

因此,创建用户密码的旧方法是:

// 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); 
}

谢谢

因为散列是单向函数,所以不能遍历数据库并将旧散列转换为新的Laravel(bcrypt)散列

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

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

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


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

由于哈希是一个单向函数,因此您无法遍历数据库并将旧哈希转换为新的Laravel(bcrypt)哈希

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

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

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


您还可以查看Laravel,这样您就可以使用
Auth::trunt()
,让它确定在引擎盖下使用哪个哈希算法。

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

这就像在新数据库中重新注册密码一样


无论是哪种类型的salt,您都可以要求用户重新输入密码。

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

这就像在新数据库中重新注册密码一样


不管是哪种盐,你都可以要求用户重新输入密码。

不。哈希是一种方法。虽然如此,但事实就是如此。@johncode纽约和MTL的大多数街道也是如此;-)Downtown@Fred-真是太对了!一个建议。您可以在用户表中添加一个名为old_password的字段,并将所有现有用户标记为true。然后,在您的身份验证中,如果是旧密码,请以旧方式检查,如果是新用户,则将使用Laravel方法。我在过去的框架迁移中成功地做到了这一点。祝你好运不。散列是一种方式。虽然如此,但事实就是如此。@johncode纽约和MTL的大多数街道也是如此;-)Downtown@Fred-真是太对了!一个建议。您可以在用户表中添加一个名为old_password的字段,并将所有现有用户标记为true。然后,在您的身份验证中,如果是旧密码,请以旧方式检查,如果是新用户,则将使用Laravel方法。我在过去的框架迁移中成功地做到了这一点。祝你好运
$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