avatar_hiv

Что такое MD5 и как с ним работать? | Примеры и ответы на популярные вопросы

Автор hiv, 2009 Фев. 18, 20:41

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Ключевые слова [SEO] md5хранение паролейалгоритм md5

hiv

MD5 - что это такое, как с ним работать, примеры
.

Каждый патяй вопрос на форуме - "Не могу зарегить Аккаунт в едиторе... почему ?".

Если говорить об алгоритме MD5, то он призван служить уникальной подписью, а также средством хранения паролей. На основе исходной информации любой длины генерируется 128-битная последовательность (подпись), обычно записываемая при помощи 32-х шестнадцатеричных символов. Причем алгоритм построен таким образом, что изменение лишь одного бита в исходном сообщении приведет к очень значительному отличию MD5-подписей. Кроме того, MD5-подпись является хэш-функцией, то есть, зная подпись, невозможно расшифровать исходное сообщение. Все эти свойства обуславливают широкое применение MD5 и аналогичных алгоритмов в различных системах безопасности к примеру для хранения паролей.

Исходя из вышесказанного можно понять, что использование MD5 в серверах MUOnLine предназначено для защиты паролей аккаунтов пользовотелей как от "залетных" на SQL сервер людей так и от самих администраторов. Мало того. Любые нарицания к администрации сервера типа "админы разгласили мой пароль" становятся не уместными.

Приступим к методам работы с MD5.

Для начала вам нужен фай библиотеки MD5. Обычно он называется WZ_MD5_MOD.dll. Причем эту библиотеку нужно положить в папку BIN вашего инстанса SQL сервера. Для ориентировки откройте поиск и поищите файл, к примеру sqlstbss.exe. Вот в папку(и) где он находится и забросьте эту библиотеку, после чего обязательно нужно сделать рестарт SQL сервера.
Сама библиотека несет в себе несколько функций из которых мы рассмотрим только одну, ее нам достаточно. dbo.XP_MD5_EncodeKeyVal – хеширует логин и пароль в 128 битовую строку. Имеет три параметра. Два входящих @btInStr-пароль и @btInStrIndex-логин, один исходящий @btOutVal-готовая хешированная строка которую возвращает процедура. Причем обязательно соблюдение типом переменных @btInStr varchar(10), @btInStrIndex varchar(10), @btOutVal BINARY(16).

Для примера можем зайти в Query Analizer и выполнить вот такой скриптик.
Declare [member=6610]Login[/member]1 varchar(10), @pass1 varchar(10), @btOutVal1 BINARY(16)
Declare [member=6610]Login[/member]2 varchar(10), @pass2 varchar(10), @btOutVal2 BINARY(16)
set [member=6610]Login[/member]1='test'
set @pass1='123456'
exec dbo.XP_MD5_EncodeKeyVal @pass1, [member=6610]Login[/member]1, @btOutVal1 OUT
select [member=6610]Login[/member]1 login1, @pass1 pass1, @btOutVal1 btOutVal1
set [member=6610]Login[/member]2='test'
set @pass2='123457'
exec dbo.XP_MD5_EncodeKeyVal @pass2, [member=6610]Login[/member]2, @btOutVal2 OUT
select [member=6610]Login[/member]2 login2, @pass2 pass2, @btOutVal2 btOutVal2

Результат
login1    pass1      btOutVal1

test      123456    0x3C6C4BA742F19D5E74ECAAC8A04427A1
login2    pass2      btOutVal2

test      123457    0xC3C14A9EA513034171FAFE0390246714
Как видно изменение всего одного символа в пароле привело к кардинальному изменению результата. То есть о подборе пароля речь не стоит. Собственно значение @btOutVal и лежит в поле Memb___pwd таблици Memb_info.

Очевидно, что эдиторы которые не поддерживают хеш MD5 не могут правильно зарегиситрировать аккаунт в вашей базе данных. Потому как они ложат в поле Memb___pwd пароль в обычном виде (char, varchar), после чего происходит конвертирование по умолчанию в varbinary, binary. Далее, когда клиент подключается к серверу происходит проверка пароля, причем не расшифровкой @btOutVal а снова хешированием логина и пароля введенного при авторизации, и дальнейшим сличением хешированной строки которая в базе данных и строки полученной при авторизации. Естественно если в Memb___pwd едитор положил не хешированный пароль, то строки не совпадут и авторизация свалится с ошибкой не существования аккаунта или неправильного пароля.

Выходы из положения.

1) То что во время второй мировой называли разведка боем. Программка под названием AccountCreate MD5. Тупой выход из положения когда во все возможные каналы связи с вами ломится нарот и требует зарегить, сменить пасс и т д. (программа прилагается к гуиду).
2) Такой же тупой выход из положения, регите аккаунт обычным едитором, после чего в QA пропускаете скрипт :
Declare [member=6610]Login[/member] varchar(10), @pass varchar(10), @btOutVal BINARY(16)
set [member=6610]Login[/member]='test'
set @pass='123456'
exec dbo.XP_MD5_EncodeKeyVal @pass, [member=6610]Login[/member], @btOutVal OUT
Update f set
memb__pwd=@btOutVal
from muonline.dbo.memb_info f
where memb___id=[member=6610]Login[/member]
Этот вариант представляет собой замену значения в memb__pwd на правильное. L @Login – логин зарегистрированного аккаунта в базе данных, а @pass это желаемый пароль на аккаунт. Мало того, этот скрипт можно применять для смены пароля на аккаунте.

3) WEB регистрация. Самый что нинаесть признанный метод регистрации на серверах MuOnLine. Здесь я не буду предлогать какие либо варианты сайта и т п. Для реализации регистрации MD5 я просто приведу PHP код который нудно добавить в обычную страницу регистрации. Причем добавлять код нужно перед вставкой записи в memb_info. Строка будет выглядеть примерно так:
$msquery = "exec dbo.XP_MD5_EncodeKeyVal '$pass', '$login', '$btOutVal' OUT";
$msresults = mssql_query($msquery);
Таким образом в $btOutVal мы получим правильную строку пароля, собственно которую и нудно вставить в поле memb__pwd таблици memb_info. То есть в строке которая выглядит примерно так:
$msquery = "INSERT INTO MEMB_INFO (memb___id,memb__pwd,memb_name,sno__numb,mail_addr,fpas_ques,fpas_answ,appl_d
ays
,modi_days,out__days,true_days,mail_chek,bloc_code,ctl1_code) VALUES ('$username',  '$password','$realname','1','$email','$squest','$sansw','01/01/2006','01/01/2006','01/01/2006','01/01/2006','1','0','0')";
Нужно заменить '$password' на '$btOutVal'.

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

Fane1

a,esle г menea ne hocet zalogitsa znacet v atom problema,sto nada izmeniti sshtob vseo rabotalo

GrInYa

Цитата: Fane1 от 2009 Дек. 20, 20:51  a,esle г menea ne hocet zalogitsa znacet v atom problema,sto nada izmeniti sshtob vseo rabotalo

ничего...проверь если твоя база с мд5 или нет и ищи себе веб каторый поддерживает то что тебе нужно

Fane1


cTpaHHuK

#4
Fane1 зайди в Query Analyzer --> MuOnline --> User Tables -->  dbo.MEMB_INFO и там в колонке memb_pwd посмотри, стоит ли у тебя MD5 или нет, если стоит, то пароль будет показывать примерно такой : 0x3C6C4BA742F19D5E74ECAAC8A04427A1 (символы будут другие).

Fane1

ne magu zaiti v MuOnline no basa esti znacit stota nepravilina zdelal

vseo narmalina na muweb 0.8 palucilasi

a esle uje na server ne zapuscaetsa dataserver1 i dataserver2 sto ata????

GrInYa

проветь айпи...нужно написать без точек...например 127 0 0 1

Fane1


GrInYa

#8
и под конец 255

127 0 0 1 255

а odbc.reg запустил ?

к стате ты как запускаешь их? на приамую через ехе или через ярлыков ?через определюные порты?

Fane1

ea tak zapuskaiu 001 - SCFDB patom MUServerStartUP.exe i tam ne zapuscaetsea

GrInYa

#10
ну так режить праблему сложно...нужно видеть фсё ето...но они могут незапускаца ишё и за некорректвой настроики фаилов из папке data/


например гдето удалить или добавить "end" по файлам

cTpaHHuK

Fane1

1. Проверь, везде ли изменил ип.
2. На всякий случай ещё раз запусти odbc.reg.
3. Проверь StartUp

Fane1

ea vse ip pastavil ,no kagda atcrivaiu links 1-8 ili na grugih 1-10 ne atcrivaiutsea vse .Scajite sto nada atcriti v pervuiu oceredi iz link !

tak mne piset istocinic odbc ne naiden ,znacet evo nujna vcliuceati i gde vliucaesi ego?a sait stavil na mssql budet li rabotati server na odbc

odbc.reg daiot asibca pri atcrivanii .... s cem atcrivati atat fail???

cTpaHHuK

Fane1 может тебе нежен odbd.reg а не odbc.reg? если у тебя диск C, то нужен odbc.reg, если D, то odbd.reg.

GrInYa

Цитата: cTpaHHuK от 2009 Дек. 23, 13:22  Fane1 может тебе нежен odbd.reg а не odbc.reg? если у тебя диск C, то нужен odbc.reg, если D, то odbd.reg.

какая разница ? ето фсиволишь имя регистра

Fane1 если у тебя неполадки с регистром то попробуй сам ево исправить или бери другой похожий

Deathless

#15
Цитата: cTpaHHuK от 2009 Дек. 23, 12:22  Fane1 может тебе нежен odbd.reg а не odbc.reg? если у тебя диск C, то нужен odbc.reg, если D, то odbd.reg.
Если честно, ты убил меня своей логикой.
Для справки:
ODBC (Open DataBase Connectivity) — это программный интерфейс (API) доступа к базам данных.

smoken

#16
$msquery = "EXEC master.dbo.XP_MD5_EncodeKeyVal '$pass', '$login', $hash OUT";
$msresults = sqlsrv_query($connection, $msquery);

может кто в курсе, запускаю такой код из пхп скрипта и выдаёт ошибку: usage: exec XP_MD5_EncodeKeyVal @string, @strindex, @keyval OUTPUT
Where @keyval is a char of at least 16 bytes.

В самом MSSQL 2008 R2 всё работает корректно. Ничего не понимаю, что-то с размером переменной, но в пхп они явно не задаются. В чём дело? Пробовал и со скобками значения, и без скобок - ничего не помогает.
----
Разобрался в чём дело было, но возникла другая ошибка. Процедура WZ_MD5_EncodeKeyVal возвращает бинарное значение (вроде всё верно), но когда я обрабатываю бинарный результат функцией пхп bin2hex(), она мне неправильное значение выдаёт. Хэш есть, но он отличается от того, что лежит в базе.
Может кто знает в чём проблем?
Кстати, хэш с сайта больше на 2 бита. Подозреваю, что дело в 0х, но понять куда и что нужно подставить я не могу. Если у кого-то возникнут похожие проблемы - обращайтесь, расскажу как решить.
----
Отлично поговорил сам с собой, в любом случае, проблему решил когда пошёл по другому пути. Создал в мсскл функцию, которая наконец возвращает верный результат.

Похожие темы (1)

Сообщений: 6
Просмотров: 7653