Encrypting/Decrypting binary file

0

Witam, dopiero zaczynam swoją przygodę z programowaniem dlatego proszę o wyrozumiałość ;) Poniższy kod ma na celu zapisanie zaszyfrowanej zmiennej do pliku binarnego, a następnie odszyfrowanie otrzymanego pliku i zapisanie jego zawartości do innej zmiennej. Niestety przy próbie kompilacji dostaje wyjątek (System.Security.Cryptography.CryptographicException: „Uzupełnienie jest nieprawidłowe i nie można go usunąć.”)
w miejscu
CheckTransaction = (List<Transaction>)My2Formatter.Deserialize(DecryptedStream);

Prosiłbym o jakąś podpowiedź jak to naprawić ;)

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Formatters.Binary;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

namespace AllTransactions
{
    [Serializable]
    class Transaction
    {
        public Guid Id { get; set; }
        public decimal Amount { get; set; }
    }
    class Application
    {
        static void Main(string[] args)
        {
            RijndaelManaged RMCrypto = new RijndaelManaged();

            byte[] Key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16 };
            byte[] IV = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16 };

            List<Transaction> AllTransactions = new List<Transaction>
                {
                      new Transaction(){ Id=Guid.NewGuid(), Amount=100}
                      ,new Transaction(){ Id=Guid.NewGuid(), Amount=200}
                      ,new Transaction(){ Id=Guid.NewGuid(), Amount=300}
                      ,new Transaction(){ Id=Guid.NewGuid(), Amount=400}
                };
	        string path = @"C:\Poprzedni dysk\Zadanie2\transaction.dat";

                FileStream MyStream = new FileStream(path, FileMode.Create);

                CryptoStream CryptStream = new CryptoStream(MyStream,
                RMCrypto.CreateEncryptor(Key, IV),
                CryptoStreamMode.Write);
                

            	BinaryFormatter MyFormatter = new BinaryFormatter();
                MyFormatter.Serialize(CryptStream, AllTransactions);
                MyStream.Close();



            //DECRYPTING

            RijndaelManaged RMDecrypto = new RijndaelManaged();
            FileStream copyPathStream = new FileStream(path, FileMode.OpenOrCreate);

            CryptoStream DecryptedStream = new CryptoStream(copyPathStream,
            RMDecrypto.CreateDecryptor(Key, IV),
            CryptoStreamMode.Read);

       
            BinaryFormatter My2Formatter = new BinaryFormatter();
            List<Transaction> CheckTransaction = new List<Transaction>();
            
            CheckTransaction = (List<Transaction>)My2Formatter.Deserialize(DecryptedStream);

            foreach (Transaction a in CheckTransaction)
            {
                Console.Write("Guid: " + a.Id + "  Amount: " + a.Amount);
                Console.WriteLine();
            }

        }
        
    }
}

0

Ustaw paddin mode np dla dekrypcji i enkrypcji:

RMDecrypto.Padding = PaddingMode.None;
0
andkrul napisał(a):

Ustaw paddin mode np dla dekrypcji i enkrypcji:

RMDecrypto.Padding = PaddingMode.None;

Niestety nie pomaga :/

0

Ustaw zarówno dla RMCrypto i RMDecrypto

1 użytkowników online, w tym zalogowanych: 0, gości: 1