Я запускаю игровой сервер, у меня есть основной сервер, который обрабатывает все пакеты, отправленные игроками (клиентами).
Я хочу зашифровать свои пакеты через AES, чтобы каждый пакет был уникальным (я думаю, что мне нужен IV здесь), и чтобы этот сервер принимал каждый зашифрованный пакет только один раз, чтобы, если кто-то попытался прослушать пакет, он не мог отправить его снова.
Как мне это сделать?
P.S я код сервера и клиента в C ++
Вы могли бы использовать какой-то SSL API, такой как OpenSSL, но это может быть излишним в вашем сценарии, так как вам нужно будет использовать сертификаты и т. Д. Существует реализация Rijndael с открытым исходным кодом (алгоритм, который использует AES) реализация C ++ Вот.
Вот пример его использования:
void testEncryptBlock()
{
const int nCharacters = 16;
char szHex[33];
char *EncryptedData = new char[nCharacters + 1];
CRijndael rijndael;
int result = rijndael.MakeKey("abcdefghabcdefghabcdefghabcdefgh");
// Add some dummy data for the sake of the demo
EncryptedData = (char*)memset(EncryptedData, 255, nCharacters); // 0xfffff...
result = rijndael.EncryptBlock(EncryptedData);
... // Do something with the data
delete [] EncryptedData;
}
Других решений пока нет …