Анализ ответа от PtokaX, Вопрос по сокетам |
Здравствуйте, гость ( Вход | Регистрация )
Анализ ответа от PtokaX, Вопрос по сокетам |
23.2.2010, 16:22
Сообщение
#21
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
|
|
|
23.2.2010, 16:26
Сообщение
#22
|
|
Начинающий Группа: Пользователи Сообщений: 20 Регистрация: 23.2.2010 Пользователь №: 6 163 Спасибо сказали: 0 раз |
Точно :-) Спасибо Вам, с наступающим (вшим) Праздником.
Ну если будут еще вопросы к вам....то уж пожалуйста стерпите :-) |
|
|
23.2.2010, 16:27
Сообщение
#23
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
|
|
|
23.2.2010, 16:32
Сообщение
#24
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Только не забудь добавить функцию DCN экранирования (см. последний пост указанной темы).
|
|
|
24.2.2010, 2:35
Сообщение
#25
|
|
Начинающий Группа: Пользователи Сообщений: 20 Регистрация: 23.2.2010 Пользователь №: 6 163 Спасибо сказали: 0 раз |
>>Только не забудь добавить функцию DCN экранирования (см. последний пост указанной темы).
Функцию наlock2key С# (данную в топике) дополнил, но все таки что-то не то...Такого шаблона не получается:($Key tСА ° < ключ> бp|). Символы начала и конца последовательности tСА ° и бp| у меня не присутствуют и я даже не могу понять что это за дополнения. Мне кажется. я что-то не то передаю в функцию lock2key. Какой именно код нужно "шифровать", я так полагаю что код в последовательности вида $Lock EXTENDEDPROTOCOLCVJYYYNNgSg:9J9ubJcBg4KKNhFwin Pk=PtokaX| , такой EXTENDEDPROTOCOLCVJYYYNNgSg:9J9ubJcBg4KKNhFwin ... или я опять что-то упустил |
|
|
24.2.2010, 12:36
Сообщение
#26
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
в функцию lock2key передавать нужно весь параметр команды $Lock
|
|
|
24.2.2010, 12:40
Сообщение
#27
|
|
Начинающий Группа: Пользователи Сообщений: 20 Регистрация: 23.2.2010 Пользователь №: 6 163 Спасибо сказали: 0 раз |
|
|
|
24.2.2010, 12:48
Сообщение
#28
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
если в параметре команды $Lock есть подстрока " Pk=", то нужно взять подстроку до " Pk=", в противном случае если есть пробел, то взять подстроку до пробела, иначе взять полностью весь параметр.
|
|
|
24.2.2010, 13:08
Сообщение
#29
|
|
Начинающий Группа: Пользователи Сообщений: 20 Регистрация: 23.2.2010 Пользователь №: 6 163 Спасибо сказали: 0 раз |
|
|
|
24.2.2010, 13:31
Сообщение
#30
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Ну что тут можно сказать... Где-то ты наврал в коде. Ты получаешь неправильный ключ.
Вот я получил по твоему параметру lock правильный ключ. 1.jpg ( 199.59 килобайт ) Кол-во скачиваний: 39 разбирайся где у тебя там ошибка. |
|
|
24.2.2010, 13:36
Сообщение
#31
|
|
Начинающий Группа: Пользователи Сообщений: 20 Регистрация: 23.2.2010 Пользователь №: 6 163 Спасибо сказали: 0 раз |
Это не я в коде наврал, а функция Lock2Key не возвращает то, что нужно. Я и спрашиваю, функцию Lock2Key на С# кто-нибудь проверял?
|
|
|
24.2.2010, 13:40
Сообщение
#32
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Я её не проверял. Я надеялся, что Markiz проверил, прежде чем публиковать в теме http://mydc.ru/topic2989.html
Видимо он накосячил с этой функцией. |
|
|
24.2.2010, 13:41
Сообщение
#33
|
|
Начинающий Группа: Пользователи Сообщений: 20 Регистрация: 23.2.2010 Пользователь №: 6 163 Спасибо сказали: 0 раз |
Блин ((
|
|
|
24.2.2010, 13:45
Сообщение
#34
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Ща я попробую написать её под С#, хоть и не владею синтаксисом данного языка.
|
|
|
24.2.2010, 13:52
Сообщение
#35
|
|
Начинающий Группа: Пользователи Сообщений: 20 Регистрация: 23.2.2010 Пользователь №: 6 163 Спасибо сказали: 0 раз |
Я могу с экранами переслать тебе
Вот это отсутвует в функции C#: for(i = 0; i < len; ++i) key[i] = ((key[i]<<4) & 0xF0) | ((key[i]>>4) & 0x0F); char *newkey = (char *)calloc(1, len + 100); Это смещение как я понял <<4 - это сдвиг влево поразрядно, в Шарпе аналогичная операция & 0x0F - фактически это и есть кодировка, в Шарпе так же |
|
|
24.2.2010, 13:59
Сообщение
#36
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Код private string lock2key(string lock) { int len = lock.Length; byte[] key = new byte[len]; int i; for(i = 1; i < len; ++i) key[i] = (byte)(lock[i] ^ lock[i - 1]); key[0] = (byte)(lock[0] ^ lock[len - 1] ^ lock[len - 2] ^ 5); for(i = 1; i < len; ++i) key[i] = (byte)((key[i]<<4) & 0xF0) | ((key[i]>>4) & 0x0F); // тут ещё нужно сделать DCN экранирование return Encoding.ASCII.GetString(key); } По поводу DCN экранирования. Экранируемые коды(символы): 0 (\0), 5(\5), 36($), 96(`), 124(|), 126(~) То есть, вместо каждого нулевого символа в ключ нужно вставить строку "/%DCN000%/" Вместо 5-го ANSI символа нужно вставить строку "/%DCN005%/" Символ $ в ключе заменяем на "/%DCN036%/" Символ ` в ключе заменяем на "/%DCN096%/" Символ | в ключе заменяем на "/%DCN124%/" Символ ~ в ключе заменяем на "/%DCN126%/" Не знаю как в шарпе ты это будешь делать, в с/c++ это можно было сделать, например, функцией sprintf. |
|
|
24.2.2010, 14:20
Сообщение
#37
|
|
Начинающий Группа: Пользователи Сообщений: 20 Регистрация: 23.2.2010 Пользователь №: 6 163 Спасибо сказали: 0 раз |
Экран у меня сделан, сейчас допроверю ответ функции
Вот тут поправит нужно: for(i = 1; i < len; ++i) key[i] = ((key[i]<<4) & 0xF0) | ((key[i]>>4) & 0x0F); На for(i = 0; i < len; ++i) key[i] = (byte)(((key[i]<<4) & 0xF0) | ((key[i]>>4) & 0x0F)); хмм...чего-то не хватает |
|
|
24.2.2010, 14:40
Сообщение
#38
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Чего не хватает?
|
|
|
24.2.2010, 14:49
Сообщение
#39
|
|
Начинающий Группа: Пользователи Сообщений: 20 Регистрация: 23.2.2010 Пользователь №: 6 163 Спасибо сказали: 0 раз |
|
|
|
24.2.2010, 16:33
Сообщение
#40
|
|
Начинающий Группа: Пользователи Сообщений: 20 Регистрация: 23.2.2010 Пользователь №: 6 163 Спасибо сказали: 0 раз |
Все ОК, проблемма в кодировке была (не ASCII, Маркизу нужно стукнуть по голове :-)). Выкладываю рабочую функцию...могу сделать отдельным классом.
CODE // // Функция lock2key (влючает экранирование) // принимает строку $Lock // // Cимволы команд $Lock и $Key с кодами 0, 5, 36, 96, 124 и 126 должны быть заменены, // соответственно, на /%DCN000%/, /%DCN005%/, /%DCN036%/, /%DCN096%/, /%DCN124%/ и /%DCN126%/ // Экранируемые коды(символы): // 0 (\0), 5(\5), 36($), 96(`), 124(|), 126(~) // 0x0 0x5 0x24 0x60 0x7C 0x7E private string lock2key(string str_lock) { byte[] arr_key = new byte[str_lock.Length]; int sL = str_lock.Length; for (int i = 1; i < sL; ++i) arr_key[i] = (byte)(str_lock[i] ^ str_lock[i - 1]); arr_key[0] = (byte)(str_lock[0] ^ str_lock[sL - 1] ^ str_lock[sL - 2] ^ 5); for (int i = 0; i < sL; ++i) arr_key[i] = (byte)(((arr_key[i] << 4) & 0xF0) | ((arr_key[i] >> 4) & 0x0F)); string arr_keyTemp = Encoding.Default.GetString(arr_key); for (int i = 0; i < sL; i++) { if (arr_keyTemp[i] == 0x0) { arr_keyTemp = arr_keyTemp.Substring(0, i) + "/%DCN000%/" + arr_keyTemp.Substring(i + 1, (arr_keyTemp.Length - (i + 1))); } if (arr_keyTemp[i] == 0x5) { arr_keyTemp = arr_keyTemp.Substring(0, i) + "/%DCN005%/" + arr_keyTemp.Substring(i + 1, (arr_keyTemp.Length - (i + 1))); } if (arr_keyTemp[i] == 0x24) { arr_keyTemp = arr_keyTemp.Substring(0, i) + "/%DCN036%/" + arr_keyTemp.Substring(i + 1, (arr_keyTemp.Length - (i + 1))); } if (arr_keyTemp[i] == 0x60) { arr_keyTemp = arr_keyTemp.Substring(0, i) + "/%DCN096%/" + arr_keyTemp.Substring(i + 1, (arr_keyTemp.Length - (i + 1))); } if (arr_keyTemp[i] == 0x7C) { arr_keyTemp = arr_keyTemp.Substring(0, i) + "/%DCN124%/" + arr_keyTemp.Substring(i + 1, (arr_keyTemp.Length - ( i+ 1))); } if (arr_keyTemp[i] == 0x7E) { arr_keyTemp = arr_keyTemp.Substring(0, i) + "/%DCN126%/" + arr_keyTemp.Substring(i + 1, (arr_keyTemp.Length - (i + 1))); } } return arr_keyTemp; } Эм, чего-то не читабельно получилось Всем спасибо еще раз, на хаб заходит...ник появляется и все ОК вообщем |
|
|
Похожие темы
|
Сейчас: 23.11.2024, 14:23 |