Я знаю, что есть бесчисленные подобные вопросы, на которые здесь уже давали ответы, но я все еще не могу понять проблему, с которой сталкиваюсь. Я пытаюсь зашифровать и расшифровать байты данных файла, используя AES, но это не позволяет мне это делать. Я попробовал следующий код со строкой в качестве ввода, и он работает как шарм. Если я попытаюсь использовать приведенный ниже код, используя байты данных файла в качестве входных данных, я получаю только ошибку. Мне интересно , почему Я не могу должным образом зашифровать / расшифровать байты данных файла и что это вызывает его сбой.
Ошибка:
Exception thrown: 'System.Security.Cryptography.CryptographicException' in mscorlib.dll
An exception of type 'System.Security.Cryptography.CryptographicException' occurred in mscorlib.dll but was not handled in user code
Padding is invalid and cannot be removed.
Этот код предназначен для тестирования, поэтому он жестко закодирован.
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Security.Cryptography;
using System.Windows;
namespace Dashing
{
public partial class MainWindow : Window
{
private RijndaelManaged rij = new RijndaelManaged();
public MainWindow()
{
InitializeComponent();
rij.KeySize = 256;
rij.BlockSize = 128;
rij.Padding = PaddingMode.PKCS7;
rij.GenerateKey();
rij.GenerateIV();
TcpListener listener = new TcpListener(new IPEndPoint(IPAddress.Any, 5000));
listener.Start();
NewClientAndSendData();
TcpClient client = listener.AcceptTcpClient();
NetworkStream stream = client.GetStream();
byte[] data = new byte[20000000];
int read = stream.Read(data, 0, data.Length);
byte[] decryptedData;
Array.Resize(ref data, read);
decryptedData = Transform( data, false);
string path = @"C:\Users\krist\Desktop\testing\10-Terra Nova kap 7 Ressursene.pdf";
File.WriteAllBytes(path, decryptedData);
}
private void NewClientAndSendData()
{
TcpClient client = new TcpClient();
client.Connect("192.168.10.122", 5000);
NetworkStream stream = client.GetStream();
byte[] encryptedData = Transform(File.ReadAllBytes(@"C:\Users\krist\Desktop\10-Terra Nova kap 7 Ressursene.pdf"), true);
stream.Write(encryptedData, 0, encryptedData.Length);
}
private byte[] Transform(byte[] data, bool encrypt)
{
using (var ms = new MemoryStream())
{
using (var handler = encrypt ? rij.CreateEncryptor() : rij.CreateDecryptor())
{
using (var cstream = new CryptoStream(ms, handler, CryptoStreamMode.Write))
{
cstream.Write(data, 0, data.Length);
cstream.FlushFinalBlock();
return ms.ToArray();
}
}
}
}
}
}