Научно-образовательный IT-форум при КНИТУ-КАИ

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Научно-образовательный IT-форум при КНИТУ-КАИ » Задачи и вопросы » [+] Реализация шифрованного канала


[+] Реализация шифрованного канала

Сообщений 1 страница 4 из 4

1

Ну а теперь к данной задачке попробуйте добавить шифрованный канал.

P.S.: Богданур, не спать! :)

2

Я знаю, что избыточность выпирает, но все же, почему данный код не исправен при исполнении?!

Server:

using System;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Security.Cryptography;

namespace Server
{
    class Program
    {
        static void Main(string[] args)
        {
            TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 5001);
            listener.Start();
            Socket tc = listener.AcceptSocket();

            SymmetricAlgorithm des = new DESCryptoServiceProvider();
            ICryptoTransform desencrypt = des.CreateEncryptor(Encoding.ASCII.GetBytes("12345678"), Encoding.ASCII.GetBytes("87654321"));
            ICryptoTransform desdecrypt = des.CreateDecryptor(Encoding.ASCII.GetBytes("12345678"), Encoding.ASCII.GetBytes("87654321"));

            NetworkStream stm = new NetworkStream(tc);
            CryptoStream cryptostreamR = new CryptoStream(stm, desdecrypt, CryptoStreamMode.Read);
            StreamReader r = new StreamReader(cryptostreamR);
            string msg = r.ReadLine();
            Console.WriteLine(msg);
            r.Dispose();
            r.Close();
            cryptostreamR.Close();
            stm.Flush();
            stm.Dispose();
            stm.Close();

            NetworkStream stm2 = new NetworkStream(tc);
            CryptoStream cryptostreamW = new CryptoStream(stm2, desencrypt, CryptoStreamMode.Write);
            StreamWriter w = new StreamWriter(cryptostreamW);
            w.WriteLine("Message from server.");
            w.Flush();
            w.Dispose();
            w.Close();
            cryptostreamW.Close();
            stm2.Flush();
            stm2.Dispose();
            stm2.Close();

            tc.Close();
        }
    }
}


Client:

using System;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Security.Cryptography;

namespace Client
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            client.Connect("127.0.0.1", 5001);

            SymmetricAlgorithm des = new DESCryptoServiceProvider();
            ICryptoTransform desencrypt = des.CreateEncryptor(Encoding.ASCII.GetBytes("12345678"), Encoding.ASCII.GetBytes("87654321"));
            ICryptoTransform desdecrypt = des.CreateDecryptor(Encoding.ASCII.GetBytes("12345678"), Encoding.ASCII.GetBytes("87654321"));
 
            NetworkStream stm = new NetworkStream(client);
            CryptoStream cryptostreamW = new CryptoStream(stm, desencrypt, CryptoStreamMode.Write);
            StreamWriter w = new StreamWriter(cryptostreamW);
            w.WriteLine("Message from client.");
            w.Flush();
            w.Dispose();
            w.Close();
            cryptostreamW.Close();
            stm.Flush();
            stm.Dispose();
            stm.Close();

            NetworkStream stm2 = new NetworkStream(client);
            CryptoStream cryptostreamR = new CryptoStream(stm2, desdecrypt, CryptoStreamMode.Read);
            StreamReader r = new StreamReader(cryptostreamR);
            string msg = r.ReadLine();
            Console.WriteLine(msg);
            r.Dispose();
            r.Close();
            cryptostreamR.Close();
            stm2.Flush();
            stm2.Dispose();
            stm2.Close();

            client.Close();
        }
    }
}

3

Можно опираться на такой пример.

4

Господа, реализация не заставила себе долго ждать. :)

Сервер:

using System;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Security.Cryptography;

namespace Server
{
    static class Program
    {
        static void Main(string[] args)
        {
            byte[] bytesRecv = new byte[4096];
            TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 5001);
            listener.Start();
            Socket tc = listener.AcceptSocket();

            //Получение
            tc.Receive(bytesRecv);
            string msg = Encoding.Unicode.GetString(bytesRecv);
            Console.WriteLine(msg.Remove(msg.IndexOf('\0')).Decrypt());

            //Отправка
            tc.Send(Encoding.Unicode.GetBytes(Crypt("Secret message from server.")));

            tc.Close();
        }

        private static byte[] key = new byte[8] { 1, 2, 3, 4, 5, 6, 7, 8 };
        private static byte[] iv = new byte[8] { 1, 2, 3, 4, 5, 6, 7, 8 };

        public static string Crypt(this string text)
        {
            SymmetricAlgorithm algorithm = DES.Create();
            ICryptoTransform transform = algorithm.CreateEncryptor(key, iv);
            byte[] inputbuffer = Encoding.Unicode.GetBytes(text);
            byte[] outputBuffer = transform.TransformFinalBlock(inputbuffer, 0, inputbuffer.Length);
            return Encoding.Unicode.GetString(outputBuffer);
        }

        public static string Decrypt(this string text)
        {
            SymmetricAlgorithm algorithm = DES.Create();
            ICryptoTransform transform = algorithm.CreateDecryptor(key, iv);
            byte[] inputbuffer = Encoding.Unicode.GetBytes(text);
            byte[] outputBuffer = transform.TransformFinalBlock(inputbuffer, 0, inputbuffer.Length);
            return Encoding.Unicode.GetString(outputBuffer);
        }
    }
}


Клиент:

using System;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Security.Cryptography;

namespace Client
{
    static class Program
    {
        static void Main(string[] args)
        {
            byte[] bytesRecv = new byte[4096];
            Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            client.Connect("127.0.0.1", 5001);

            //Отправка
            client.Send(Encoding.Unicode.GetBytes(Crypt("Secret message from client.")));

            //Получение
            client.Receive(bytesRecv);
            string msg = Encoding.Unicode.GetString(bytesRecv);
            Console.WriteLine(msg.Remove(msg.IndexOf('\0')).Decrypt());

            client.Close();
        }

        private static byte[] key = new byte[8] { 1, 2, 3, 4, 5, 6, 7, 8 };
        private static byte[] iv = new byte[8] { 1, 2, 3, 4, 5, 6, 7, 8 };

        public static string Crypt(this string text)
        {
            SymmetricAlgorithm algorithm = DES.Create();
            ICryptoTransform transform = algorithm.CreateEncryptor(key, iv);
            byte[] inputbuffer = Encoding.Unicode.GetBytes(text);
            byte[] outputBuffer = transform.TransformFinalBlock(inputbuffer, 0, inputbuffer.Length);
            return Encoding.Unicode.GetString(outputBuffer);
        }

        public static string Decrypt(this string text)
        {
            SymmetricAlgorithm algorithm = DES.Create();
            ICryptoTransform transform = algorithm.CreateDecryptor(key, iv);
            byte[] inputbuffer = Encoding.Unicode.GetBytes(text);
            byte[] outputBuffer = transform.TransformFinalBlock(inputbuffer, 0, inputbuffer.Length);
            return Encoding.Unicode.GetString(outputBuffer);
        }
    }
}


Вы здесь » Научно-образовательный IT-форум при КНИТУ-КАИ » Задачи и вопросы » [+] Реализация шифрованного канала