Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шифрование трафика - Простенький метод, Простой и быстрый метод шифрования трафи 
:(
    Опции темы
MuForum
Дата 18.7.2009, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

Репутация: нет
Всего: 4



Доброе время суток.
Мне необходимо осуществить шифрование трафика между клиентом и сервером игрового сервера.
Так как речь идёт о Online Игре, то передача данных осуществляется в больших объёмах. Количество передаваемых пакетов в секунду достигает в среднем ~15 пакетов длиной в ~2 кбайта (2048 байт).
Естественно такой длины данные дефрагментируются и на другую сторону приходят кусками.
По началу я пробовал использовать симметричный алгоритм, шифровал блоками по 16 байт. Если длина данных не была кратной 16, то наращивал нулями.
Проблема встала в том, что когда наращиваешь нулями, а на другую сторону приходят склеенные, обрывочные пакеты, то нормально разобрать их не представляется возможности.
В связи с этим мне пришлось отказаться от симметричного метода шифрования.
Решил попробовать ассиметричный метод шифрования, но тут резко встал вопрос в производительность. Так как речь идёт об Online игре, а количество играков переваливает за 1000 пользователей, то нагрузка на компьютер более чем существенная.
Я решил для начала попробовать самую элементарную шифровку, XOR, тремя байтам.
Код

void EncryptDecryptBuf(byte *bufIn, byte *bufOut, int bSize)
{
    int index = 0;
    byte MASK[] = { 0xA2, 0x1B, 0xD8 };
    // ----
    for (int i = 0; i < bSize; i++, index++)
    {
        if (index > 2) index = 0;
        // ---
        bufOut[i] = bufIn[i] ^ MASK[index];
    }
}

- Но к сожалению, данный метод в некоторых случаях не правильно дешифрует данные, как бы это не смешно звучало. (На сколько я понял, Это случается когда сталкиваются два одинаковых значения)

# Вопрос №1: Что не правильно я делаю, что данный метод не корректно в некоторых случаях отрабатывает?

# Вопрос №2: Какой метод/алгоритм вы можете посоветовать в данной ситуации? (Только не симметричный...)


Это сообщение отредактировал(а) MuForum - 18.7.2009, 22:31


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
triclosan
Дата 18.7.2009, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 18.8.2006

Репутация: 1
Всего: 12



Цитата(MuForum @  18.7.2009,  22:25 Найти цитируемый пост)
как бы это не смешно звучало. (На сколько я понял, Это случается когда сталкиваются два одинаковых значения)


обнуляем регистр только одной атомарной опирацией:
Код

xor ebx, ebx


или:
Код

int x = 42;
x=x^x; //x=0


Цитата(MuForum @  18.7.2009,  22:25 Найти цитируемый пост)
Какой метод/алгоритм вы можете посоветовать в данной ситуации? (Только не симметричный...)

Ваш по-вашему не симметричный?

Это сообщение отредактировал(а) triclosan - 18.7.2009, 22:38
PM MAIL   Вверх
MuForum
Дата 18.7.2009, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

Репутация: нет
Всего: 4



#2, triclosan - Я допустил маленькою оплошность, имелось ввиду не блочный алгоритм.
Код

int x = 42;
int z = -1, z2 = -1;
z = x ^ x; // z = 0;
z2 = z ^ x; // z2 = 42;

- На данном примере обе операции проходят успешно.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
andrew_121
Дата 19.7.2009, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



Цитата(MuForum @  18.7.2009,  22:25 Найти цитируемый пост)
дефрагментируются и на другую сторону приходят кусками

Скорее "фрагментируются".

Не понятно для чего изобретать велосипед? Используй OpenSSL. И протокол, и шифрование.
Если это слишком много, попробуй IOLIB. У нее есть возможно устанавливать свои кодеки для шифровки/дешифровки.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
GrayCardinal
Дата 19.7.2009, 10:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 3
Всего: 58



MuForum
Код 100% рабочий. Проблема может быть в том, что пакеты фрагментируются. Т.е. Вы шифранули буфер, а он пришел как два. В результате второй начинает декодироваться с первого байта маски. Что не верно. Необходимо просто контролировать размер пакетов...

Добавлено через 1 минуту и 11 секунд
andrew_121
Не потянет openSSL тыщу клиентов  smile 


--------------------
PM MAIL WWW   Вверх
andrew_121
Дата 19.7.2009, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



GrayCardinal, Гы... Не принял во внимание.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
W4FhLF
Дата 19.7.2009, 11:02 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 1
Всего: 121



Цитата(MuForum @  18.7.2009,  22:25 Найти цитируемый пост)
# Вопрос №2: Какой метод/алгоритм вы можете посоветовать в данной ситуации? (Только не симметричный...)


Симметричный и ассиметричный тут не причём. Тебе нужен потоковый алгоритм.

Добавлено через 4 минуты и 19 секунд
http://en.wikipedia.org/wiki/Stream_cipher



Это сообщение отредактировал(а) W4FhLF - 19.7.2009, 11:05


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0930 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.