У нас есть устаревший сайт ASP.NET, который использует здесь методы шифрования:
http://www.codekeep.net/snippets/af1cd375-059a-4175-93d7-25eea2c5c660.aspx
Когда мы вызываем следующий метод, страница загружается очень медленно и в итоге возвращается Сброс подключения:
Decrypt(" ", true);
Если метод вызывается несколько раз в последующих запросах страниц, Пул приложений отключается .
Это происходит на сервере Windows 2008 под управлением .NET Framework v3.5.
Я сузил проблему до вызова TransformFinalBlock()
.
ПРИМЕЧАНИЕ: на Кассини я не получаю тайм-аут соединения; вместо этого выдается следующее исключение:
System.Security.Cryptography.CryptographicException: Bad Data
Вызов Decrypt () для других строк не вызывает проблем в любой среде.
Почему это происходит? Это ошибка в TripleDESCryptoServiceProvider?
Очевидно, я мог бы отфильтровать строку cipherString, чтобы отклонить "" и избежать этой конкретной проблемы. Однако меня беспокоит, что некоторые другие значения cipherString, которые я не подозреваю, вызовут DoS.
ОБНОВЛЕНИЕ 2011.06.28
Ниже приведен минимальный код для воспроизведения проблемы:
// problem occurs when toEncryptArray is an empty array {}
byte[] toEncryptArray = {};
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
byte[] keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes("dummy_key"));
hashmd5.Clear();
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
tdes.Key = keyArray;
tdes.Mode = CipherMode.ECB;
tdes.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tdes.CreateDecryptor();
// the following line can crashes the ASP.NET Application Pool (may need to call multiple times).
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
tdes.Clear();