【问题标题】:update a specific field on all rows of a table with about 50000 records更新包含大约 50000 条记录的表的所有行上的特定字段
【发布时间】: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 一个真正难以破解的密码算法。
  • 您有什么更好的建议吗?
  • 正如马克所说,运行两个哈希完全没有帮助。首先选择更好的哈希算法,然后对密码进行加盐

标签: php mysql


【解决方案1】:

只需将其作为单个查询运行:

UPDATE `members` SET `password`=MD5(MD5(`password`))

顺便说一句,双 MD5 没用。如果您想要更好的安全性,您可以使用 MD5 + salt 或 SHA1 + salt。

【讨论】:

  • 我自己说得再好不过了。
  • md5() php函数和MD5() mysql函数有区别吗?
  • @Ahmad - 使用 PHP 生成的 MD5 散列和使用 MySQL 生成的散列之间没有区别,但请(为了您的安全)不要这样做。当您使用它时,mysql 已过时,请考虑使用 mysqli 或 pdo 代替您的数据库访问
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 2022-07-06
  • 2015-03-11
  • 2019-04-27
相关资源
最近更新 更多