Используйте какой-нибудь известный алгоритм, в моих приложениях я использую blowfish. Но это не то, что делает его безопасным.
В играх обычно есть процесс проверки подлинности программы, подключающейся к серверу, этот процесс называется «процесс рукопожатия». Сервер отправляет пакет, который содержит значения и зашифрован (клиент знает, как его расшифровать) ключ blowfish. Ключ blowfish, полученный от сервера, является случайным при каждом подключении. Это первая часть рукопожатия.
Следующая часть шифрует вычисленное целое число на основе значений, полученных при соединении (которые являются случайными), а затем шифрует его с помощью blowfish.
Когда сервер получает этот пакет, сервер отправляет тот же пакет, который шифруется новым (окончательным) ключом Blowfish. Клиент должен найти этот ключ, расшифровав его с помощью старого ключа Blowfish, а затем выполнить вычисления с значения, полученные из первого пакета.
Это процесс рукопожатия, после его завершения вы можете отправить свой счет по тому же принципалу (или, возможно, поместить его в рукопожатие и отправить поддельный пакет после того, как рукопожатие выполнено, чтобы обмануть реверсоров).
Это слишком много, но слишком много для реверса.
Другим способом решения вашей проблемы является добавление двухбайтового (слова) значения безопасности (CRC) на основе содержимого пакета с помощью собственных вычислений. Сервер проверит это значение, а если оно недопустимое -> Disconnect.