2010-10-20 3 views
1

В моей базе данных насчитывается более 600 пользователей. Пароли ранее были сохранены в виде обычного текста (я знаю, это пощечина). В любом случае, я изменил свой код, чтобы хранить хэшированные пароли STA1, но мне нужно преобразовать существующие пароли в мою базу данных, чтобы каждый пользователь не нуждался в том, чтобы войти и изменить свою учетную запись.Преобразование текстовых паролей в базу данных для хэширования паролей?

Любая помощь?

ответ

2

Сначала создайте резервную копию базы данных с помощью mysqldump. Например,

bash#> mysqldump -u username -p nameoftable >file_to_write_to.sql 

Кроме того, удостоверьтесь, что поле пароля содержит 40 символов. Если нет, то необходимо выполнить следующую команду SQL:

alter table nameoftable modify column password varchar(40); 

, а затем это изменить пароли:

update nameoftable set password=sha1(password) where 1; 
+0

Отлично, спасибо большое. Все в значительной степени говорили то же самое. Все отлично работало – BigMike

2

Попробуйте это:

update your_table set passfield = sha1(passfield); 

сделать правильную резервную копию, прежде чем делать это, так как вы не сможете отменить операцию (в этом вся цель функции HASH).

Имейте в виду, что SHA1 вернет HEX-кодирование двоичного значения.

2

Если у вас уже есть пользователи в базе данных с хэшированными паролями, то будьте осторожны, о замене таблиц всех однажды. Вы можете получить хэши SHA1, которые снова преобразуются в новый хэш SHA1.

Если у вас уже есть новые пользователи с хешированными паролями, напишите сценарий, который запрашивает базу данных для всех паролей, если их длина меньше 40 (или 20, если вы устанавливаете второй параметр равным true), затем сгенерируйте новый SHA1, основанный на текущем пароле (который вы будете знать, является открытым текстом, если он меньше 40 символов) и замените старый пароль на новый.

Смежные вопросы