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();
}
}
}
}