Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Обсуждение статей
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2011, 18:42   #671
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Ты бездумно исключил из привата кодировку шрифта, а на прием оставил прежнюю позицию вырезки, естественно, нет теперь прежних 4-х байт, а клиент считает что есть, вот и начинает резать с половины ника. Поскольку по вырезке получается половина ника и часть времени, то такого клиент в списке не находит и создает новую вкладку. Тут нужно еще условие создать: если нет в списке ника, вырезанного из привата, то ничего не создавать.

Приватное сообщение с клиента будет выглядеть вот так:

Код:
ClientSocket2.Socket.SendText('3' + pagecontrol1.ActivePage.Caption + Chr(152)
                              + '>> ['+TimeToStr(Time)
                              +']  '+Nik
                              +':  '+TextEdit.Text);

Прием приватного сообщения у клиента будет выглядеть так:

Код:
Memo.Lines.Add(Copy(txt, 3 + Length(niktemp), len - Length(niktemp) - 1));

У сервера отправка приватного сообщения:

Код:
SS2.Socket.Connections[i].SendText('3' + niks + Chr(152)
                                   + '>> [' + TimeToStr(Time)
                                   + ']  ' + Niks
                                   + ':  ' + TextEdit.Text);
У сервера прием приватного сообщения:

Код:
Memo.Lines.Add(Copy(txt, 3 + Length(PrivateUser), len - Length(PrivateUser) - 1));
У сервера трансляция приватного сообщения:

Код:
SS2.Socket.Connections[b].SendText('3' + TUserList(Socket.Data).Name + Chr(152)
                                   + Copy(txt, 2 + Length(PrivateUser) + 1, Length(txt) - Length(PrivateUser) - 2));
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 13.06.2011, 19:51   #672
darek13
Пользователь
 
Аватар для darek13
 
Регистрация: 27.04.2011
Сообщений: 68
По умолчанию

ООо спасибо большое!, все работает правдо опять придется переделывать разшифровку, но то ничего страшного, а еще такой вопрос, у тебя по случайности нет исходников алгоритма шифровария AES для текста, а то чего то нормального найти не могу
darek13 вне форума Ответить с цитированием
Старый 13.06.2011, 20:14   #673
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Такого нет. Оно тебе нужно? ...есть у тебя шифрование и достаточно, ...а кто поумнее тот хоть как расшифрует, только время потратит.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 13.06.2011, 20:56   #674
darek13
Пользователь
 
Аватар для darek13
 
Регистрация: 27.04.2011
Сообщений: 68
По умолчанию

у меня вообще было сначала реализовано шифрование Base64 а потом поверх XOR, но руководитель сказал что не канает такая фишка, надо что то по серьезней, а на сколько я знаю то сейчас самый матерый это и есть AES хотя я подумывал над DES
darek13 вне форума Ответить с цитированием
Старый 14.06.2011, 23:47   #675
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Фильм "Семнадцать мгновений весны" смотрел? ...момент когда Штирлиц получил шифровку, взял книгу с полки и по указателям "вытащил" весь зашифрованный текст - вот это надежно. Книга в данном случае - таблица подмены. Сделай несколько таблиц и помести в укромном месте у клиента и сервера, ...в пакете должна быть ссылка на номер таблицы, по ней каждое сообщение будет шифроваться по разному, перехватчик никогда не узнает как расшифровать пакет, а если у него есть клиент, то никакое шифрование не поможет, если он ломанет программу. Размер пакета изменится на 1 байт.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 15.06.2011, 11:10   #676
darek13
Пользователь
 
Аватар для darek13
 
Регистрация: 27.04.2011
Сообщений: 68
По умолчанию

Beermonza, помоги еще с такой проблемой, когда у меня клиент отправляет сообщение клиенту, то сначала ж оно проверяется на сервере кому предназначенно. Так вот, как у меня все работает: когда сообщение было отослоно(в зашифрованном виде) от клиента, сервер его принял, затем он считал с БД пароль отправителя, расшифровал сообщение и поместил его в переменную TEMP. Потом как происходит действия, если получатель сервер, то он выводит это сообщение себе, которое находится в этой переменной. Тут проблем нет. Проблема вот в чем, если получатель не сервер, а какой то клиент, то начинается перебор поиска нужно клиента. После того как получатель был найден, то сервер считывает с БД его пароль и шифрует текст с переменной TEMP в переменную STRTEMP и потом отправляет сообщение этим куском кода:

Код:
SS2.Socket.Connections[b].SendText('3' 
                                   + TUserList(Socket.Data).Name + Chr(152)
                                   + Copy(txt, 2 + Length(PrivateUser) + 1, Length(txt) - Length(PrivateUser) - 2));
Но сама проблема в том что, так, он отправляет сообщение в том зашифрованном виде, в котором изначально послал отправитель (клиент), а мне нужно что бы он послал сообщение которое находится в переменной STRTEMP. Вот я не могу это реализовать, помоги пожалуйста!

Последний раз редактировалось Beermonza; 15.06.2011 в 15:43.
darek13 вне форума Ответить с цитированием
Старый 15.06.2011, 16:05   #677
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

darek13, ты видимо не ознакомился с командами копирования, и не понимаешь до сих пор смысл кода, что привел. Давай еще раз поясню. Copy - команда копирования содержимого некоторой строки формата String:

Код:
Copy({строка}, {начальный символ}, {длина копирования});
Код, что ты привел, заменяет в пакете привата ник получателя на ник отправителя. Зачем? ...клиент прикрепляет ник того, кому передать сообщение, чтобы сервер нашел адресата по этому нику. Когда сервер нашел адресата, то получатель, чтобы отобразить вкладку, должен знать ник отправителя, вот сервер и меняет ник в пакете. Если все переложить на клиента, т.е. в пакете будет и ник "от кого" и "кому", то можно жульничать как вздумается, просто указывая левые ники так, что приваты будут идти от одного человека, но от имени того, кого он вписал посредством левой программы. Этого допускать нельзя.

Зашифровывать нужно пакет уже с подменой ника. Если твой STRTEMP содержит подмену, то и отсылай как SS2.Socket.Connections[b].SendText('3'+STRTEMP); ...и всего делов. Код команды '3' и вообще любой код шифровать нельзя, иначе ты будешь прогонять все пакеты через расшифровку, а потом только смотреть код. А если код левый? ...например '9', но ты не узнаешь этого пока не расшифруешь. Правильнее будет, сначала смотреть первый байт, если он попадает в диапазон кодов, то обрабатывать - отправлять на расшифровку, иначе - выпнуть пользователя.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 15.06.2011, 16:16   #678
darek13
Пользователь
 
Аватар для darek13
 
Регистрация: 27.04.2011
Сообщений: 68
По умолчанию

Нет STRTEMP содержит только зашифрованный текст, без ника и команды
darek13 вне форума Ответить с цитированием
Старый 15.06.2011, 16:18   #679
darek13
Пользователь
 
Аватар для darek13
 
Регистрация: 27.04.2011
Сообщений: 68
По умолчанию

Например когда сервер передает сообщение клиенту то
Код:
SS2.Socket.Connections[i].SendText('3' + niks + Chr(152)
                                                      + '>> ['+TimeToStr(Time)
                                                      + '] '+Niks
                                                      + ': '+strtmp);
strtmp - это чисто зашифрованный текст
darek13 вне форума Ответить с цитированием
Старый 15.06.2011, 23:17   #680
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Так нереально определить начало текста, тем более, что время тоже не постоянно имеет одно и тоже число байт. Зашифровывай все после байта Chr(152), ...и расшифровывай на другой стороне, соответственно.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обновление в блоге - Создание клиент-сервера Pblog Обсуждение статей 0 03.10.2007 17:12
обновление в блоге - Диплом. Создание и продвижение сайта - готовь сани летом, а дипл Pblog Обсуждение статей 0 31.08.2007 20:00
обновление в блоге - USB Холодильник Pblog Обсуждение статей 0 25.06.2007 14:13
обновление в блоге - О ярлыках Pblog Обсуждение статей 0 27.05.2007 03:17