![]() |
|
|
![]()
|
|
| scroollocker |
|
||||||
![]() .{--}. Профиль Группа: Участник Сообщений: 40 Регистрация: 17.9.2010 Репутация: нет Всего: нет |
Пол дня мучаюсь, все идет нормально, но остановился на авторизации MD5-Digest составления response. Нашел такой алгоритм:
вот так делаю:
После отправки сервер возвращает не дружественное:
Использую компонент md5 шифрования, взятый из компонента gloox.(прикреплен к теме) Подскажите ошибки в коде, или направте на рабочий пример авторизации MD5-Digest C++ С уважением, Андрей Это сообщение отредактировал(а) scroollocker - 17.7.2011, 13:55 Присоединённый файл ( Кол-во скачиваний: 4 )
md5.rar 5,57 Kb |
||||||
|
|||||||
| artsb |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Я как-то решал похожую задачу. Только делал авторизацию для SMTP.
По последовательности действий, вроде бы, всё правильно. Единственное, не знаю насколько верны значения: nc, qop и d_uri. Теперь по коду:
Так делать нельзя. Метод binary().c_str() возвращает указатель (char*) на строку (массив символов). Вы приравниваете его строке (AnsiString). Но всё дело в том, что если в этом массиве встретится нулевой символ ('\0' - символ конца строки), то в результирующей строке у вас будут указаны не все данные. Так же, может произойти и обратное: в этом массиве может не оказаться нулевого символа и причём, его может не оказаться в конце массива. А это значит, что в результирующую строку может попасть мусор. Поэтому, нужно делать как-то так:
То же самое и в остальных местах. Но лучше всего, отказаться от AnsiString и использовать std::string. Тогда memcpy не понадобится. Это сообщение отредактировал(а) artsb - 17.7.2011, 23:28 -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
||||
|
||||
| scroollocker |
|
||||
![]() .{--}. Профиль Группа: Участник Сообщений: 40 Регистрация: 17.9.2010 Репутация: нет Всего: нет |
xvr,
в прикрепленном md5, как я понял, функция binary() как раз и возвращает этот 16 байтовый хэш. А вот где достать именно этот hex. если использовать и там hex и там hex получится не так. или почему написано H и HEX? artsb, Да действительно у меня строка отрезалась на \0 символе. Сделал как вы сказали, строка вроде начала получаться целой. но сервер все равно не хочет меня авторизовать. Может быть есть какой нибудь пример?, а то для делфи море, для Си++ ни одного. Это сообщение отредактировал(а) scroollocker - 18.7.2011, 21:35 |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Да, действительно. Но тогда операции с А1 следует проводить с осторожностью - там не текст, а бинарные данные. В частности md5->feed(A1.c_str()); делать нельзя - обрежет по 0 Добавлено через 59 секунд md5->feed(HA1.c_str()); - тут тоже ошибка |
|||
|
||||
| scroollocker |
|
|||
![]() .{--}. Профиль Группа: Участник Сообщений: 40 Регистрация: 17.9.2010 Репутация: нет Всего: нет |
Значит все таки нужно отказаться от AnsiString. А зависит ли то, что я кодирую обычную строку, не UTF8? увидел в исходниках миранды, что там еще перед этим в UTF8 кодиться
|
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Как сказал xvr, нужно поизбавляться от указанных им ошибок. А потом уже будем смотреть дальше. Поэтому, как я уже говорил, лучше избавьтесь от AnsiString.
Добавлено через 42 секунды
По идее, об этом должно было упоминаться в спецификации... Добавлено через 1 минуту и 9 секунд Так что, попробуйте конвертнуть. Добавлено через 2 минуты и 56 секунд Я когда делал авторизацию по SMTP, открыл спецификацию, нашёл описание этих "манипуляций" со строками. Там же был указан результат для конкретных данных из примера. Ну я и возился с этими же самыми данными, пока не получил нужный результат из примера -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| scroollocker |
|
|||
![]() .{--}. Профиль Группа: Участник Сообщений: 40 Регистрация: 17.9.2010 Репутация: нет Всего: нет |
Посмотрел RFC2831 http://www.ietf.org/rfc/rfc2831.txt. Оказалось нужно еще и в UTF8 кодировать.
Ну теперь надо исправлять ошибки. xvr, artsb Спасибо. =) artsb
Наверное, я тоже так буду делать, нашел Онлайн шифрователь пакетов. Буду мучить =) Это сообщение отредактировал(а) scroollocker - 18.7.2011, 22:02 |
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Кстати, необязательно:
Всё зависит от параметра "charset". -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| scroollocker |
|
|||
![]() .{--}. Профиль Группа: Участник Сообщений: 40 Регистрация: 17.9.2010 Репутация: нет Всего: нет |
А что надо написать в charset чтобы не использовать UTF8?
|
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Эм... Не знаю -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| scroollocker |
|
|||
![]() .{--}. Профиль Группа: Участник Сообщений: 40 Регистрация: 17.9.2010 Репутация: нет Всего: нет |
artsb,
Подправил сейчас, как вы написали, и функция возвращает нормальный md5. Я прям счастлив =) спасибо вам Вот только все равно не авторизовывается. Похоже всё дело в UTF8. И возник сразу вопрос. А как средствами Builder'a перевести char * или string в UTF8? =) |
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Сначала, переводите char в utf-16 с помощью MultiByteToWideChar. Далее с помощью WideCharToMultiByte переводите из utf-16 в utf-8. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| scroollocker |
|
|||
![]() .{--}. Профиль Группа: Участник Сообщений: 40 Регистрация: 17.9.2010 Репутация: нет Всего: нет |
artsb,
все работает авторизовывает меня Спасибо вам огромное) |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |