In this post I’m looking at the Padding is invalid and cannot be removed error
Background on Padding is invalid and cannot be removed
Today I tried to send data encrypted between an application built in c# and an application built in Silverlight. When I encrypted the data in one application the decryption would fail with the following exception:
An exception of type ‘System.Security.Cryptography.CryptographicException’ occurred in mscorlib.dll but was not handled in user code Additional information: Padding is invalid and cannot be removed
Your Solution
To encrypt my plain text I used the following code:
public static string EncryptStringAES(string plainText, string sharedSecret) {
string outStr = null;
AesManaged aesAlg = null;
try
{
Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt);
aesAlg = new AesManaged();
aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8);
aesAlg.IV = key.GetBytes(aesAlg.BlockSize / 8);
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(plainText);
}
}
outStr = Convert.ToBase64String(msEncrypt.ToArray());
}
}
finally {
if (aesAlg != null) aesAlg.Clear();
}
return outStr;
}for the decryption I used this bit of code:
public static string DecryptStringAES(string cipherText, string sharedSecret)
{
AesManaged aesAlg = null; string plaintext = null; try {
Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt);
aesAlg = new AesManaged();
aesAlg.BlockSize = aesAlg.LegalBlockSizes[0].MaxSize;
aesAlg.KeySize = aesAlg.LegalKeySizes[0].MaxSize;
aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8);
aesAlg.IV = key.GetBytes(aesAlg.BlockSize / 8);
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
byte[] bytes = Convert.FromBase64String(cipherText);
using (MemoryStream msDecrypt = new MemoryStream(bytes))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
plaintext = srDecrypt.ReadToEnd();
}
}
}
finally
{
if (aesAlg != null) aesAlg.Clear();
}
return plaintext;
}
only after setting the block size and the key size the error went away.

In Decrypt function what is _salt. Please tell me sir
Hi Balu,
This is a password used within your code.
You can find more details here:
http://www.c-sharpcorner.com/UploadFile/a85b23/text-encrypt-and-decrypt-with-a-specified-key/