CryptoStream
От: stellerex  
Дата: 30.01.03 09:07
Оценка:
Мужики, третий день не могу побить загадочную проблему с 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 в первой строке содержит инвалидные символы.. Без использования кодека — все путем. Где тут бага?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.