【发布时间】:2012-03-27 10:49:47
【问题描述】:
我有一个表格,其中包含我的用户信息,例如 username 、 password 、 name 、 family 等,当用户在我的网站上注册时,她的密码使用一个 md5() 函数散列然后插入到表格中。我的表现在有大约 50000 条记录。 但现在我想再次使用两个 md5() 函数对他们的密码进行哈希处理以解决安全问题。为此,我编写了下面的代码,首先选择所有用户,然后执行更新查询以更改密码:
$allMembers = mysql_query("select `username`,`password` from `members`",$conn);
if (mysql_num_rows($allMembers) > 0){
while($row = mysql_fetch_array($allMembers)){
$oldPass = $row['password'];
$newPass = md5(md5('Hello'.$oldPass.'Friends'));
mysql_query("update `members` set `password`='$newPass' where `username`='".$row['username']."'",$conn);
}
}
echo("Yes");
但是当我运行这段代码时,它只用了很少的时间就产生了No Data Received 消息。 但现在我如何更新我的大表中的密码字段?
编辑:我使用了 salt + md5,但在我的代码中将其删除以进行汇总 :)
【问题讨论】:
-
“两个 md5() 函数再次用于安全问题。”... WTF!不要走这条路。阅读密码加盐以使密码更安全,而不是多次散列(这通常使密码更少安全)
-
您是否检查过选择查询是否返回任何内容?
-
这将使这些密码三倍 md5,因为您正在运行
md5(md5($password_md5_hash))。无论如何,MD5 本来就是要快的,你should be using 一个真正难以破解的密码算法。 -
您有什么更好的建议吗?
-
正如马克所说,运行两个哈希完全没有帮助。首先选择更好的哈希算法,然后对密码进行加盐