Ну а теперь к данной задачке попробуйте добавить шифрованный канал.
P.S.: Богданур, не спать!
Научно-образовательный IT-форум |
Поддержать просветительскую деятельность форума можно по ссылке.
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » Научно-образовательный IT-форум » Вопросы и задачи » [+] Реализация шифрованного канала
Ну а теперь к данной задачке попробуйте добавить шифрованный канал.
P.S.: Богданур, не спать!
Я знаю, что избыточность выпирает, но все же, почему данный код не исправен при исполнении?!
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();
}
}
}
Можно опираться на такой пример.
Господа, реализация не заставила себе долго ждать.
Сервер:
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-форум » Вопросы и задачи » [+] Реализация шифрованного канала