Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Сети > Шифрование трафика - Простенький метод |
Автор: MuForum 18.7.2009, 22:25 | ||
Доброе время суток. Мне необходимо осуществить шифрование трафика между клиентом и сервером игрового сервера. Так как речь идёт о Online Игре, то передача данных осуществляется в больших объёмах. Количество передаваемых пакетов в секунду достигает в среднем ~15 пакетов длиной в ~2 кбайта (2048 байт). Естественно такой длины данные дефрагментируются и на другую сторону приходят кусками. По началу я пробовал использовать симметричный алгоритм, шифровал блоками по 16 байт. Если длина данных не была кратной 16, то наращивал нулями. Проблема встала в том, что когда наращиваешь нулями, а на другую сторону приходят склеенные, обрывочные пакеты, то нормально разобрать их не представляется возможности. В связи с этим мне пришлось отказаться от симметричного метода шифрования. Решил попробовать ассиметричный метод шифрования, но тут резко встал вопрос в производительность. Так как речь идёт об Online игре, а количество играков переваливает за 1000 пользователей, то нагрузка на компьютер более чем существенная. Я решил для начала попробовать самую элементарную шифровку, XOR, тремя байтам.
- Но к сожалению, данный метод в некоторых случаях не правильно дешифрует данные, как бы это не смешно звучало. (На сколько я понял, Это случается когда сталкиваются два одинаковых значения) # Вопрос №1: Что не правильно я делаю, что данный метод не корректно в некоторых случаях отрабатывает? # Вопрос №2: Какой метод/алгоритм вы можете посоветовать в данной ситуации? (Только не симметричный...) |
Автор: MuForum 18.7.2009, 22:41 | ||
#2, triclosan - Я допустил маленькою оплошность, имелось ввиду не блочный алгоритм.
- На данном примере обе операции проходят успешно. |
Автор: andrew_121 19.7.2009, 06:59 |
Скорее "фрагментируются". Не понятно для чего изобретать велосипед? Используй http://www.openssl.org/. И протокол, и шифрование. Если это слишком много, попробуй http://www.iolib.org/. У нее есть возможно устанавливать свои кодеки для шифровки/дешифровки. |
Автор: GrayCardinal 19.7.2009, 10:30 |
MuForum, Код 100% рабочий. Проблема может быть в том, что пакеты фрагментируются. Т.е. Вы шифранули буфер, а он пришел как два. В результате второй начинает декодироваться с первого байта маски. Что не верно. Необходимо просто контролировать размер пакетов... Добавлено через 1 минуту и 11 секунд andrew_121, Не потянет openSSL тыщу клиентов ![]() |
Автор: andrew_121 19.7.2009, 10:51 |
GrayCardinal, Гы... Не принял во внимание. |
Автор: W4FhLF 19.7.2009, 11:02 | ||
Симметричный и ассиметричный тут не причём. Тебе нужен потоковый алгоритм. Добавлено через 4 минуты и 19 секунд http://en.wikipedia.org/wiki/Stream_cipher |