В настоящее время я пытаюсь реализовать сервер сокетов, который позволяет клиентам отправлять некоторые команды для запуска и остановки различных служб, которые предоставляет сервер. Я установил связь между клиентом и сервером и заставил сервер отвечать на команды, которые отправляют клиенты. Следующим шагом будет шифрование связи между клиентом и сервером. Я пытаюсь выполнить это с помощью RSACryptoServiceProvider.
Вот код, который я использую для шифрования данных:
CspParameters parameter = new CspParameters();
parameter.KeyContainerName = "keycontainer";
rsaProvider = new RSACryptoServiceProvider(parameter);
StreamReader r = new StreamReader(@"C:\tmp\rsakey.xml");
rsaProvider.FromXmlString(r.ReadToEnd());
string command = "server reply goes here";
ASCIIEncoding bc = new ASCIIEncoding();
byte[] cmd = rsaProvider.Encrypt(bc.GetBytes(command), false);
handler.Send(cmd);
И вот код, который я использую для расшифровки моих команд
rsaProvider = new RSACryptoServiceProvider(parameter);
StreamReader r = new StreamReader(@"C:\tmp\rsakey.xml");
string xml = r.ReadToEnd();
rsaProvider.FromXmlString(xml);
ASCIIEncoding bc = new ASCIIEncoding();
string test = bc.GetString(state.buffer);
byte[] tmp = rsaProvider.Decrypt(bc.GetBytes(test), false);
Я попытался непосредственно расшифровать мою строку после того, как зашифровал их, и это работает. Но передача с клиента на сервер или наоборот не работает, и функция Decrypt выдает исключение, которое говорит мне, что данные для расшифровки превышают максимум для модуля.
Как правильно шифровать трафик между клиентом и сервером?