У меня есть код, который расшифровывает пароль с помощью Rijndael
public static string DecryptPassword(string encrypted) {
using (MemoryStream ms = new MemoryStream())
using (RijndaelManaged rijndaelManaged = new RijndaelManaged())
using (ICryptoTransform cryptoTransform = rijndaelManaged.CreateDecryptor(mGlobalKey, mGlobalVector))
using (CryptoStream cs = new CryptoStream(ms, cryptoTransform, CryptoStreamMode.Read)) {
byte[] encryptedBytes = Convert.FromBase64String(encrypted);
cs.Write(encryptedBytes, 0, encryptedBytes.Length);
cs.FlushFinalBlock();
return Encoding.Unicode.GetString(ms.GetBuffer(), 0, (int)ms.Length);
}
}
Проблема в том, что удаление криптопотока вызывает исключение
System.IndexOutOfRangeException : Index was outside the bounds of the array.
at System.Security.Cryptography.RijndaelManagedTransform.DecryptData(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode paddingMode, Boolean fLast)
at System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
at System.Security.Cryptography.CryptoStream.FlushFinalBlock()
at System.Security.Cryptography.CryptoStream.Dispose(Boolean disposing)
at System.IO.Stream.Close()
at System.IO.Stream.Dispose()
Я нашел несколько ссылок на похожие проблемы, но не нашел решения.
Безопасно ли просто удалить удаление криптопотока, или это просто приведет к взрыву финализатора в более позднее время?