Непраивльная работа md5 с UTF8 - как починить?

Сенсей

Новичок
Непраивльная работа md5 с UTF8 - как починить?

Есть сайт. 30K юзеров. Работал на кодировке windows-1251

Переконвертировал недавно его на UTF-8 (как базу так и нужные файлы)

Теперь люди у кого был пароль из русских букв - не могут зайти на сайт. Проверяю:

Пример - пароль стомфак

В базе хеш пароля который был создан с md5('стомфак')в windows-1251 - 2d3ef9ec2d1bdabd5a8ab4ad6850ea44

Хешь который выдает MySql - SELECT md5( 'стомфак' ) ; - 506684b4eb99f1cbf8f32cc591730ce6

Хешь который выдает теперь PHP с UTF8 - md5('стомфак') - 506684b4eb99f1cbf8f32cc591730ce6

Как быть?

Решение $auth_password = iconv('utf-8','windows-1251',$auth_password); - отпадает так как уже есть юзеры которые регистрировались с кодировкой UTF8 - и еслиу них пароль русскими буквами - то уже они не смогут войти.
 

dimagolov

Новичок
конвертить в php строки с паролями в 1251 и брать от них MD5, после чего сравнивать с базой.

проще не париться и попросить юзеров поменять пароли согласно стандартной процедуре.

но в начале надо разобраться где ты накосячил, потому что что php что MySQL должны давать один и тот же MD5. по ходу у тебя php не в UTF-8.

-~{}~ 20.09.08 13:04:

о, ты уже понял, что косяк был в php

ну проверяй md5 как с конвертацией, так и без нее, если хочешь юзерам угодить. шансов что случайно совпадет немного.
 

weregod

unserializer
если вспомнить дату и время конвертации cp1251 => utf8, то можно автоматом конвертнуть, если в таблице юзеров в бд есть поле "дата регистрации", выбрав пользоватей, которые регались раньше Вашего времени Ч
 

Beavis

Banned
weregod
а как конвертнуть? расшифровать md5, конвертнуть и зашифровать обратно?
 

fixxxer

К.О.
Партнер клуба
1 выяснить с какого user id начинаются md5(cp1251)
2 добавить поле oldpasswd true/false
3при авторизации, пока знаем нешифрованый пароль - обновлять

если 1 затруднительно, то в 2 true/false/null и при авторизации если нулл то проверять варианты в обеих кодировках
 
Сверху