шифрование списка паролей - PullRequest
0 голосов
/ 26 мая 2011

У меня есть база данных, заполненная пользователями, для которых я сгенерировал пароли для использования кода:

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();

Ответы [ 3 ]

3 голосов
/ 26 мая 2011

Вы можете зашифровать все пароли, используя SQL:

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

Кстати, SQL-запрос в вашем PHP-коде не работает, потому что password является зарезервированным словом в MySQL, поэтому вам нужно заключить его в кавычки.

0 голосов
/ 26 мая 2011

Остальные уже дали решения.Но ваш код тоже кажется неправильным.Вы обновляете только последний результат.Вы должны поместить запрос на обновление в цикл 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);
    ...
}
0 голосов
/ 26 мая 2011

Во-первых: «Не работает» в не полезно.Вы должны определить, что не работает.Вы должны определить для себя, что вы ожидаете увидеть и что вы на самом деле получаете в каждой точке вашей программы.Затем вы можете определить, где эти две вещи расходятся.

Проблема 1: Вы перебираете всех пользователей выбранного запроса, но сохраняете только последний в своей переменной.Также, если ваш выбор не возвращает никаких строк, вы будете выполнять обновление с неинициализированными переменными.

Проблема 2: В вашей таблице есть столбец с именем «пароль».Это зарезервированное ключевое слово с mysql.Вы можете использовать это имя, но вместо этого следует ссылаться на него следующим образом:

... SET `password` = ...

Оно может работать без кавычек, но зачем рисковать ...

Кроме того, ваш запрос на обновление выглядит правильно,Если он ничего не обновляет, вы должны протестировать его, используя командную строку mysql или инструмент управления, например phpmyadmin.

...