Сервер:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Security.Cryptography;namespace Server
{
static class Program
{static void Main(string[] args)
{
SymmetricAlgorithm des = new DESCryptoServiceProvider();
des.Key = Encoding.ASCII.GetBytes("12345678");
des.IV = Encoding.ASCII.GetBytes("12345678");
ICryptoTransform decrypt = des.CreateDecryptor();TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"),5001);
listener.Start();
TcpClient tc = listener.AcceptTcpClient();
NetworkStream stm = tc.GetStream();
CryptoStream cryptostream = new CryptoStream(stm, decrypt, CryptoStreamMode.Read);
StreamReader r = new StreamReader(stm);
string str = r.ReadLine();
Console.WriteLine("Зашифрованные данные: " + str);
Console.WriteLine("Расшифрованные данные: " + Decrypt(str));
}public static string Decrypt(this string text)
{
SymmetricAlgorithm algorithm = DES.Create();
ICryptoTransform transform = algorithm.CreateDecryptor(Encoding.ASCII.GetBytes("12345678"), Encoding.ASCII.GetBytes("12345678"));
byte[] inputbuffer = Encoding.UTF8.GetBytes(text);
byte[] outputBuffer = transform.TransformFinalBlock(inputbuffer, 0, inputbuffer.Length);
return Encoding.UTF8.GetString(outputBuffer);
}}
}
Клиент:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Security.Cryptography;namespace Client
{
class Program
{
static void Main(string[] args)
{
try
{
SymmetricAlgorithm des = new DESCryptoServiceProvider();
des.Key = Encoding.ASCII.GetBytes("12345678");
des.IV = Encoding.ASCII.GetBytes("12345678");
ICryptoTransform encrypt = des.CreateEncryptor();TcpClient client = new TcpClient();
client.Connect("localhost", 5001);
NetworkStream stm = client.GetStream();
CryptoStream cryptostream = new CryptoStream(stm, encrypt, CryptoStreamMode.Write);
StreamWriter w = new StreamWriter(cryptostream);
w.WriteLine("Hello world!");
w.Close();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
Console.WriteLine("Server has probably not started.");
}
}
}
}
Причина ошибки вроде бы понятна, но если подогнать данные под нужную длину, то получаем сообщение "Плохие данные". В чем причина?