I am attempting to decrypt using this function but I am unsure what is causing it to fail
public string Decrypt(byte[] cipherText, byte[] IV, byte[] key)
{
using (AesCryptoServiceProvider AESDecrypt = new AesCryptoServiceProvider())
{
//here we set the key and IV instead having the class generate them.
AESDecrypt.IV = IV;
AESDecrypt.Key = key;
ICryptoTransform decryptor = AESDecrypt.CreateDecryptor(AESDecrypt.Key,
AESDecrypt.IV);
using (MemoryStream msDecrypt = new MemoryStream(cipherText))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt,
decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
csDecrypt.Flush();
plainText = srDecrypt.ReadToEnd();
return plainText;
}
}
}
}
}
The plainText returns an empty string. The key and IV are system generated in a previous function and are being passed correctly.
I misread the first question's answer and used a .flushfinalblock to get it to return "a ciphertext" without really addressing the underlying issue. When I moved the cipher = msEncrypt.ToArray(); outside of the crypto stream it worked perfectly. And removed the .flush(). .FacePalm()