【问题标题】:encrypting list of passwords加密密码列表
【发布时间】:2011-05-26 11:53:05
【问题描述】:

我有一个数据库,里面有我为使用代码生成密码的用户:

UPDATE users SET password = SUBSTRING(MD5(RAND()) FROM 1 FOR 8)

我制作了另一个表格,仅包含用户电子邮件/密码以供快速参考

我现在想加密主用户表上的密码。我尝试使用以下代码进行此操作,但它不起作用。它有什么问题?

$query = "SELECT * FROM usersreference";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {
    $password = $row['password'];
    $email = $row['email'];
    $encrypted_password = md5($password);
}

$query = 'UPDATE users SET password = "' . $encrypted_password . '" WHERE email = "' . $email . '"';
$result = mysql_query($query);

if (mysql_affected_rows() == 1) {
    header('Location: index.php?page=Admin');
} else {
    die("there was a problem");
}
mysql_close();

【问题讨论】:

标签: php mysql sql encryption md5


【解决方案1】:

您可以使用 SQL 加密所有密码:

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

顺便说一句,您的 PHP 代码中的 SQL 查询不起作用,因为 password 是 MySQL 中的保留字,因此您需要反引号。

【讨论】:

    【解决方案2】:

    首先:“不起作用”没有帮助。你应该确定什么不起作用。您应该为自己定义您希望看到的内容以及您在程序的每一点实际获得的内容。然后你可以确定这两件事的分歧点。

    问题 1:您遍历选择查询的所有用户,但只将最后一个用户保存到您的变量中。此外,如果您的选择没有返回任何行,那么您将使用未初始化的变量执行更新。

    问题 2:您的表有一个名为“密码”的列。那是mysql的保留关键字。您可以使用该名称,但您应该像这样引用它:

    ... SET `password` = ...
    

    没有引号也可以工作,但为什么要冒险......

    除此之外,您的更新查询看起来是正确的。如果它没有更新任何东西,你应该使用 mysql 命令行或 phpmyadmin 之类的管理工具来测试运行它。

    【讨论】:

      【解决方案3】:

      其他人已经给出了解决方案。但是您的代码似乎也是错误的。您只是在更新最后一个结果。您应该将更新查询放在 while 循环中:

      $query = "SELECT * FROM usersreference";
      $result = mysql_query($query);
      while ($row = mysql_fetch_array($result)) {
          $password = $row['password'];
          $email = $row['email'];
          $encrypted_password = md5($password);
      
          $updatequery = 'UPDATE users SET password = "' . $encrypted_password . '" WHERE email = "' . $email . '"';
          $updateresult = mysql_query($updatequery);
          ...
      }
      

      【讨论】:

        猜你喜欢
        • 2011-02-18
        • 2011-06-23
        • 2011-06-30
        • 2018-01-20
        • 1970-01-01
        • 2017-07-30
        • 1970-01-01
        • 1970-01-01
        • 2017-07-20
        相关资源
        最近更新 更多