Итак, я создаю простой «веб-чат», используя классы TcpClient и TcpListener. Я хочу, чтобы все данные были отправлены, и я использую шифрование AES. Поэтому сначала я должен убедиться, что ключ AES от сервера надежно отправлен клиенту. Я пытаюсь добиться этого, зашифровав ключ AES с помощью RSA, а затем отправив его клиенту и расшифровывая его с помощью RSA.Ключ не существует при попытке расшифровки с помощью RSA
Итак, прежде всего, я создал RSACryptoServiceProvider на сервере и извлек открытый ключ. Я отправил открытый ключ клиенту и создал RSACryptoServiceProvider и импортировал этот ключ. Когда я вызываю метод Decrpyt, я получаю ключ, не существует исключения. Это мой код:
Сервер:
Это отправляет открытый ключ клиента.
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
string privateXml = rsa.ToXmlString(true);
string publicXml = rsa.ToXmlString(false);
Byte[] pubKey = Encoding.UTF8.GetBytes(publicXml);
clientStream.Write(pubKey, 0, pubKey.Length);
AesCryptoServiceProvider aes = new AesCryptoServiceProvider(); // simetrično kriptiranje
byte[] aesKey = aes.Key;
byte[] encryptedRSA = rsa.Encrypt(aesKey, false);
clientStream.Write(encryptedRSA, 0, encryptedRSA.Length);
Клиент:
Byte[] serverPublicKey = new Byte[1024];
Int32 bytes1 = stream.Read(serverPublicKey, 0, serverPublicKey.Length);
string serverKey = Encoding.UTF8.GetString(serverPublicKey, 0, bytes1);
serverKey = serverKey.Replace("\0", "");
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(serverKey);
Byte[] bytes2 = new Byte[128];
String aesKey = null;
stream.Read(bytes2, 0, bytes2.Length);
byte[] decryptedKey = rsa.Decrypt(bytes2, false);
Ничего общего с вашей проблемой: как осуществляется передача открытого ключа клиенту? Если это не так, я предлагаю создать пару ключей, внедрить открытый ключ в код клиента и вставить закрытый ключ в код сервера (или config). –