82 lines
2.4 KiB
C#
82 lines
2.4 KiB
C#
|
/*
|
|||
|
using System.Net;
|
|||
|
using System.Net.Sockets;
|
|||
|
using System.Security.Cryptography;
|
|||
|
using System.Text;
|
|||
|
|
|||
|
_ = Task.Run(ServerWorker);
|
|||
|
_ = Task.Run(ClientWorker);
|
|||
|
|
|||
|
await Task.Delay(-1);
|
|||
|
return;
|
|||
|
|
|||
|
static async Task ClientWorker()
|
|||
|
{
|
|||
|
using var socket = new Socket(SocketType.Stream, ProtocolType.Tcp);
|
|||
|
await socket.ConnectAsync(new IPEndPoint(IPAddress.Loopback, 1234));
|
|||
|
|
|||
|
using var aes = Aes.Create();
|
|||
|
aes.GenerateKey();
|
|||
|
aes.GenerateIV();
|
|||
|
|
|||
|
await using var stream = new NetworkStream(socket);
|
|||
|
await using var crypto = new CryptoStream(stream, aes.CreateEncryptor(), CryptoStreamMode.Write, true);
|
|||
|
|
|||
|
await using (var writer = new BinaryWriter(stream, Encoding.UTF8, true))
|
|||
|
{
|
|||
|
Console.WriteLine($"Client sending key: {BitConverter.ToString(aes.Key)}");
|
|||
|
Console.WriteLine($"Client sending IV: {BitConverter.ToString(aes.IV)}");
|
|||
|
|
|||
|
// send key and iv unencrypted
|
|||
|
writer.Write(aes.Key.Length);
|
|||
|
writer.Write(aes.Key);
|
|||
|
writer.Write(aes.IV.Length);
|
|||
|
writer.Write(aes.IV);
|
|||
|
}
|
|||
|
|
|||
|
await using (var writer = new BinaryWriter(crypto, Encoding.UTF8, true))
|
|||
|
{
|
|||
|
const string message = "Hello, world!";
|
|||
|
|
|||
|
// send encrypted message
|
|||
|
Console.WriteLine($"Client sending message: {message}");
|
|||
|
writer.Write(message);
|
|||
|
}
|
|||
|
|
|||
|
await crypto.FlushFinalBlockAsync();
|
|||
|
await Task.Delay(-1);
|
|||
|
}
|
|||
|
|
|||
|
static async Task ServerWorker()
|
|||
|
{
|
|||
|
using var listener = new Socket(SocketType.Stream, ProtocolType.Tcp);
|
|||
|
listener.Bind(new IPEndPoint(IPAddress.Any, 1234));
|
|||
|
listener.Listen(1);
|
|||
|
|
|||
|
using Socket client = await listener.AcceptAsync();
|
|||
|
await using var stream = new NetworkStream(client);
|
|||
|
using var aes = Aes.Create();
|
|||
|
|
|||
|
using (var reader = new BinaryReader(stream, Encoding.UTF8, true))
|
|||
|
{
|
|||
|
int keyLength = reader.ReadInt32();
|
|||
|
aes.Key = reader.ReadBytes(keyLength);
|
|||
|
|
|||
|
int ivLength = reader.ReadInt32();
|
|||
|
aes.IV = reader.ReadBytes(ivLength);
|
|||
|
|
|||
|
Console.WriteLine($"Server received key: {BitConverter.ToString(aes.Key)}");
|
|||
|
Console.WriteLine($"Server received IV: {BitConverter.ToString(aes.IV)}");
|
|||
|
}
|
|||
|
|
|||
|
await using var crypto = new CryptoStream(stream, aes.CreateDecryptor(), CryptoStreamMode.Read, true);
|
|||
|
using (var reader = new BinaryReader(crypto, Encoding.UTF8, true))
|
|||
|
{
|
|||
|
Console.Write("Server received message: ");
|
|||
|
Console.WriteLine(reader.ReadString());
|
|||
|
}
|
|||
|
|
|||
|
await Task.Delay(-1);
|
|||
|
}
|
|||
|
*/
|