Как хешировать пароли в MySQL? - PullRequest
7 голосов
/ 01 апреля 2009

Как сделать так, чтобы все пароли в моей пользовательской таблице были зашифрованы (md5 ()), кроме одной конкретной строки с использованием одного запроса?

Ответы [ 6 ]

12 голосов
/ 01 апреля 2009
UPDATE table SET Password = MD5(Password)

Я скажу, что MD5 не очень хороший уровень шифрования, и вы должны рассмотреть что-то более сильное, например ENCRYPT с пользовательской солью. Читайте об этом здесь

РЕДАКТИРОВАТЬ: похоже, первоначальный вопрос изменился. Вот измененный запрос для размещения

UPDATE table SET Password = MD5(Password) WHERE ID!=[specified index]

РЕДАКТИРОВАТЬ: стоит отметить

Шифрование MD5 взломано

4 голосов
/ 01 апреля 2009

Хеш-функции в MySQL

Для хранения паролей в вашей базе данных MySQL намного больше хеш-функций, чем MD5.
Вы можете найти их список на MySQL :: 11.10.2. Функции шифрования и сжатия .

Сохранить пароль (хэш):

UPDATE users SET password = SHA('secret_password') WHERE ....;

Проверьте пароль:

SELECT COUNT(*) FROM users WHERE name = 'username' && password = SHA('typed_password');

Если результат> 0, пользователь предоставил правильный пароль.

3 голосов
/ 01 апреля 2009

Относительно вашего редактирования: у вас есть идентификатор или имя пользователя, который идентифицирует эту строку?

UPDATE mytable
SET password = MD5(password)
WHERE id <> 123
3 голосов
/ 01 апреля 2009

Отредактировано в ответ на редактирование в OP.

UPDATE userTable
SET password = MD5(password)
WHERE NOT (<criteria to identify row to exclude>)
2 голосов
/ 15 января 2015

Я думаю, что это немного больше обновления

SET PASSWORD FOR 'existinguser'@'localhost' = PASSWORD('newpass');

или

UPDATE user SET  password = PASSWORD('newpass');

Надеюсь, эта помощь

2 голосов
/ 01 апреля 2009

При хешировании паролей не забывайте их солить, чтобы одни и те же пароли не давали одинаковых хешей:

SET @salt := CONV(FLOOR(RAND() * 0x100000000), 10, 16)

UPDATE  passwords
SET     password = CONCAT(@salt, SHA(CONCAT(@salt, @typed_password)))

SELECT  1
FROM    passwords
WHERE   SHA(CONCAT(SUBSTRING(password, 1, 8), @typed_password)) = SUBSTRING(password, 9, 40)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...