Невозможно зашифровать / расшифровать байты данных файла, используя AES - PullRequest
0 голосов
/ 23 марта 2020

Я знаю, что есть бесчисленные подобные вопросы, на которые здесь уже давали ответы, но я все еще не могу понять проблему, с которой сталкиваюсь. Я пытаюсь зашифровать и расшифровать байты данных файла, используя 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();
                    }
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...