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

时间:2013-10-25 21:05:58

标签: php mysql md5 salt sha256

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

最简单的方法是转换旧的vBulletin盐,还是检查密码是否正确,然后在第一次登录时生成新的盐?

检查脚本:

$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; 
} 

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

1 个答案:

答案 0 :(得分:0)

您是否了解PHP函数password_hash(),这是散列密码的推荐方法。它会自动为每个密码生成一个加密安全的盐,并将其包含在生成的60个字符的字符串中。

$2y$10$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa

上面的示例是password_hash()的可能结果,查看部分$nOUIs5kJ7naTuTFkBy1veu,这是生成的盐,函数password_verify()将使用它来检查密码。

您不必再担心盐了,不需要额外的数据库字段,只需存储哈希就可以了!

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