![]() |
Модераторы: feodorv |
![]() ![]() ![]() |
|
MuForum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 427 Регистрация: 13.6.2007 Где: Молдова, Кишинев Репутация: нет Всего: 4 |
Доброе время суток.
Мне необходимо осуществить шифрование трафика между клиентом и сервером игрового сервера. Так как речь идёт о Online Игре, то передача данных осуществляется в больших объёмах. Количество передаваемых пакетов в секунду достигает в среднем ~15 пакетов длиной в ~2 кбайта (2048 байт). Естественно такой длины данные дефрагментируются и на другую сторону приходят кусками. По началу я пробовал использовать симметричный алгоритм, шифровал блоками по 16 байт. Если длина данных не была кратной 16, то наращивал нулями. Проблема встала в том, что когда наращиваешь нулями, а на другую сторону приходят склеенные, обрывочные пакеты, то нормально разобрать их не представляется возможности. В связи с этим мне пришлось отказаться от симметричного метода шифрования. Решил попробовать ассиметричный метод шифрования, но тут резко встал вопрос в производительность. Так как речь идёт об Online игре, а количество играков переваливает за 1000 пользователей, то нагрузка на компьютер более чем существенная. Я решил для начала попробовать самую элементарную шифровку, XOR, тремя байтам.
- Но к сожалению, данный метод в некоторых случаях не правильно дешифрует данные, как бы это не смешно звучало. (На сколько я понял, Это случается когда сталкиваются два одинаковых значения) # Вопрос №1: Что не правильно я делаю, что данный метод не корректно в некоторых случаях отрабатывает? # Вопрос №2: Какой метод/алгоритм вы можете посоветовать в данной ситуации? (Только не симметричный...) Это сообщение отредактировал(а) MuForum - 18.7.2009, 22:31 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли) |
|||
|
||||
triclosan |
|
||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: 1 Всего: 12 |
обнуляем регистр только одной атомарной опирацией:
или:
Ваш по-вашему не симметричный? Это сообщение отредактировал(а) triclosan - 18.7.2009, 22:38 |
||||||||
|
|||||||||
MuForum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 427 Регистрация: 13.6.2007 Где: Молдова, Кишинев Репутация: нет Всего: 4 |
#2, triclosan - Я допустил маленькою оплошность, имелось ввиду не блочный алгоритм.
- На данном примере обе операции проходят успешно. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли) |
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: нет Всего: 33 |
Скорее "фрагментируются". Не понятно для чего изобретать велосипед? Используй OpenSSL. И протокол, и шифрование. Если это слишком много, попробуй IOLIB. У нее есть возможно устанавливать свои кодеки для шифровки/дешифровки. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
GrayCardinal |
|
|||
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 3 Всего: 58 |
MuForum,
Код 100% рабочий. Проблема может быть в том, что пакеты фрагментируются. Т.е. Вы шифранули буфер, а он пришел как два. В результате второй начинает декодироваться с первого байта маски. Что не верно. Необходимо просто контролировать размер пакетов... Добавлено через 1 минуту и 11 секунд andrew_121, Не потянет openSSL тыщу клиентов ![]() |
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: нет Всего: 33 |
GrayCardinal, Гы... Не принял во внимание.
-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 1 Всего: 121 |
Симметричный и ассиметричный тут не причём. Тебе нужен потоковый алгоритм. Добавлено через 4 минуты и 19 секунд http://en.wikipedia.org/wiki/Stream_cipher Это сообщение отредактировал(а) W4FhLF - 19.7.2009, 11:05 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |