Buongiorno,
da poco ho iniziato a lavorare con C# a un codice per criptare e decriptare dei file. Inizialmente non ho riscontrato nessun problema, ma nella fase di decriptazione mi sto imbattendo nel seguente errore “Padding is invalid and cannot be removed”. è da giorni che cerco una soluzione, ma ribadisco non essendo molto pratico non so come risolvere il problema. Se qualcuno riuscisse ad aiutarmi ne sarei molto grato.
Questa è la porzione di codice legata al dectipt
private void button1_Click(object sender, EventArgs e)
{
string user = textBox1.Text;
string pass = textBox2.Text;
string chiave = "airj54htdnb,67ld3jfhn57s7gj3k'l4";
string vettore = "94jf83iwjg38fja8";
StreamReader sr = new StreamReader(@"C:\MyPasswordManager\Username.txt");
string SR = sr.ReadLine();
byte[] UserCriptato = Convert.FromBase64String(SR);
AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
aes.BlockSize = 128;
aes.KeySize = 256;
aes.Key = ASCIIEncoding.ASCII.GetBytes(chiave);
aes.Key = ASCIIEncoding.ASCII.GetBytes(vettore);
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
ICryptoTransform tdc = aes.CreateDecryptor(aes.Key, aes.IV);
// L'errore me lo indica nella riga di sotto
byte[] UserDecriptato = tdc.TransformFinalBlock(UserCriptato, 0, UserCriptato.Length);
tdc.Dispose();
string USER = ASCIIEncoding.ASCII.GetString(UserDecriptato);
StreamReader sr1 = new StreamReader(@"C:\MyPasswordManager\Password.txt");
string SR1 = sr1.ReadLine();
byte[] PassCriptata = Convert.FromBase64String(SR1);
AesCryptoServiceProvider aes1 = new AesCryptoServiceProvider();
aes1.BlockSize = 128;
aes1.KeySize = 256;
aes1.Key = ASCIIEncoding.ASCII.GetBytes(chiave);
aes1.Key = ASCIIEncoding.ASCII.GetBytes(vettore);
aes1.Mode = CipherMode.CBC;
aes1.Padding = PaddingMode.PKCS7;
ICryptoTransform tdc1 = aes1.CreateDecryptor(aes1.Key, aes1.IV);
// Probabilmente anche nella riga seguente ci sarà lo stesso errore :(
byte[] PassDecriptata = tdc1.TransformFinalBlock(PassCriptata, 0, PassCriptata.Length);
tdc1.Dispose();
string PASS = ASCIIEncoding.ASCII.GetString(PassDecriptata);
// Verifico le credenziali
if (user == USER && pass == PASS)
{
Form4 form4 = new Form4();
form4.Show();
this.Hide();
}
else
{
MessageBox.Show("Nome utente o password errati, riprova");
}
}