예제 #1
0
        public void Send(string message)
        {
            using var connection = _factory.CreateConnection();
            using IModel channel = connection.CreateModel();
            DeclareQueues(channel, FromServer, ToServer);

            /* Две задачи:
             * 1) подписаться на FromServer, и, когда придет rsa, зашифровать им des, и отправить результат в очередь ToServer
             * 2) зашифровать данные и положить их в очередь ToServer */

            // 1 задача
            var consumer = new EventingBasicConsumer(channel);

            consumer.Received += (model, ea) =>
            {
                var rsa          = ea.Body.ToArray();
                var publicRSA    = Cryptographer.GetRSAFromBytes(rsa);
                var encryptedDES = Cryptographer.EncryptDesByRSA(publicRSA, _des);
                Send(channel, encryptedDES);
                _isDesSended = true;
            };

            channel.BasicConsume(
                queue: FromServer,
                autoAck: true,
                consumer: consumer);


            // 2 задача
            while (!_isDesSended)
            {
                ;
            }
            var body = Cryptographer.SymmetricEncrypt(message, _des);

            Send(channel, body);
        }