avatar_hiv

MD5: что это такое? Как с ним работать

Автор hiv, 2009 Фев. 18, 16:50

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

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

Ключевые слова [SEO] md5парольшифрование

hiv

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

Если говорить об алгоритме 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 OUTselect [member=6610]Login[/member]1 login1, @pass1 pass1, @btOutVal1 btOutVal1set [member=6610]Login[/member]2='test'set @pass2='123457'exec dbo.XP_MD5_EncodeKeyVal @pass2, [member=6610]Login[/member]2, @btOutVal2 OUTselect [member=6610]Login[/member]2 login2, @pass2 pass2, @btOutVal2 btOutVal2--------------------------------------------------------------------------------------------------Результат
------------------------------------------------------------------------------------------------login1    pass1      btOutVal1              --------- ---------- ---------------------------------- test      123456    0x3C6C4BA742F19D5E74ECAAC8A04427A
1login2    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 код я на синтаксис не проверял. Небыло времени. Но если что я думаю головы на плечах есть. Принцип я обяснил, дальше дело за вами

Источник: muforum.info
Автор:  SharedNoob

Everybody

hiv ты оборзел копипастить хоть бы автора написал, забыл или специально не указал кредиты бан 3дня.

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