private static _keys KeysSec(StateObject _state) { var key = new _keys(); var client = _state.WorkSocket; //асимметричный ключ var rsa = new RSACryptoServiceProvider(); var rsaKeyInfo = rsa.ExportParameters(false); var buffer = new byte[131]; //копирование откртого ключа и вектора в одно сообщение Array.Copy(rsaKeyInfo.Modulus, buffer, 128); Array.Copy(rsaKeyInfo.Exponent, 0, buffer, 128, 3); // отправка client.BeginSend(buffer, 0, 131, 0, SendKey2, client); KeysDone.WaitOne(); buffer = new byte[256]; // получение зашифрованного симметричного ключа client.BeginReceive(buffer, 0, 256, 0, ReadKey2, client); KeysDone.WaitOne(); // достать из сообщения зашифврованный симметричный ключ и вектор byte[] encryptedSymmetricKey = new byte[128], encryptedSymmetricIv = new byte[128]; Array.Copy(buffer, encryptedSymmetricKey, 128); Array.Copy(buffer, 128, encryptedSymmetricIv, 0, 128); // расшифровка симметричного ключа key.symmetricKey = rsa.Decrypt(encryptedSymmetricKey, false); key.symmetricIv = rsa.Decrypt(encryptedSymmetricIv, false); KeysDone.Set(); return(key); }
set => SetProperty(ref _keys, value);