Мужики, третий день не могу побить загадочную проблему с CryptoStream.
Задача следующая — загрузить и пропарсить зашифрованный xml файл. Реализация следующая:
// Конструктор.
//
public XmlDataStorage(Config config, string dbPath, ICodec codec) {
// skipped....
FileStream fis = new FileStream(dbPath, FileMode.Open, FileAccess.Read);
Stream cryptoStream = null;
XmlTextReader reader = null;
if (codec != null) {
cryptoStream = this.codec.Decrypt(fis);
reader = new XmlTextReader(cryptoStream);
} else {
reader = new XmlTextReader(fis);
}
// читаем и парсим xml из ридера, по окончании
// последовательно закрываем cryptoStream, reader, fis
Кодек в данном случае — простой враппер над DESCryptoServiceProvider, Decrypt у него реализован следующим образом:
/// <summary>
/// <see cref="ICodec.Decrypt"/>
/// </summary>
public Stream Decrypt(Stream stream) {
CryptoStream decStream = new CryptoStream(
stream, service.CreateDecryptor(key, IV), CryptoStreamMode.Read);
return decStream;
}
Проблема заключается в том, что при повторном создании XmlDataStorage с использованием кодека процентах в 80% случаев [в зависимости от влажности воздуха в помещении

] вываливается эксепшен, типа данные не могут быть прочитаны из ридера, поскольку xml в первой строке содержит инвалидные символы.. Без использования кодека — все путем. Где тут бага?