Beispiel #1
0
        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);
        }
Beispiel #2
0
 set => SetProperty(ref _keys, value);