Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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
MySQL/PHP-数据库用户登录转换_Php_Mysql_Md5_Salt_Sha256 - Fatal编程技术网

MySQL/PHP-数据库用户登录转换

MySQL/PHP-数据库用户登录转换,php,mysql,md5,salt,sha256,Php,Mysql,Md5,Salt,Sha256,我有一个vBulletin数据库,我正在尝试将用户切换到自定义系统,我已经转换了用户名和密码,然后我将双MD5'd密码转换为SHA256,但我还有一个问题,那就是salt 转换旧的vBulletin salt,或者检查密码是否正确,然后在首次登录时生成新的salt,最简单的方法是什么 正在检查脚本: $vbconvert = md5(md5($_POST["password"])); $check_password = hash('sha256', $vbconvert . $row['salt

我有一个vBulletin数据库,我正在尝试将用户切换到自定义系统,我已经转换了用户名和密码,然后我将双MD5'd密码转换为SHA256,但我还有一个问题,那就是salt

转换旧的vBulletin salt,或者检查密码是否正确,然后在首次登录时生成新的salt,最简单的方法是什么

正在检查脚本:

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

if($check_password === $row['password']) 
{ 

      $login_ok = true; 
} 
$vbconvert=md5(md5($\u POST[“password”]);
$check_password=hash('sha256',$vbconvert.$row['salt']);
对于($round=0;$round<65536;$round++)
{ 
$check_password=hash('sha256',$check_password.$row['salt']);
} 
如果($check_password===$row['password']))
{ 
$login\u ok=true;
} 

简而言之,转换或创建新salt的最简单方法是什么?

您知道PHP函数吗,建议使用散列密码的方法。它会自动为每个密码生成加密安全的salt,并将其包含在生成的60个字符串中

$2y$10$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
上面的示例是password_hash()的可能结果,请查看部分
$nOUIs5kJ7naTuTFkBy1veu
,这是生成的salt,函数password_verify()将使用它检查密码

你不必再担心盐了,不需要额外的数据库字段,只要存储散列就可以了

迁移密码的最简单方法是等待用户下次登录。当他输入密码时,您可以检查散列是否已经迁移,然后使用密码\u verify()进行检查。如果尚未迁移,则使用旧的vBulletin代码进行检查,如果密码正确,则使用password_hash()生成新的哈希并将其存储。

我将保留“double md5'd”密码,然后创建一个新的DB列,跟踪用户是否有更新的(SHA256)密码。如果没有,则需要在登录时重置密码,以更新密码和salt。这样,您的用户仍然可以登录,您不必担心反向工程和哈希。