«Поток не поддерживает поиск» с объектом CryptoStream - PullRequest
2 голосов
/ 26 октября 2009

Я пытаюсь зашифровать некоторые данные с помощью следующего кода:

public static byte[] EncryptString(byte[] input, string password)
{
    PasswordDeriveBytes pderiver = new PasswordDeriveBytes(password, null);
    byte[] ivZeros = new byte[8];
    byte[] pbeKey = pderiver.CryptDeriveKey("RC2", "MD5", 128, ivZeros);

    RC2CryptoServiceProvider RC2 = new RC2CryptoServiceProvider();

    byte[] IV = new byte[8];
    ICryptoTransform encryptor = RC2.CreateEncryptor(pbeKey, IV);

    MemoryStream msEncrypt = new MemoryStream();
    CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);
    csEncrypt.Write(input, 0, input.Length);
    csEncrypt.FlushFinalBlock();

    return msEncrypt.ToArray();
}

Однако, когда он достигает инициализации моего объекта CryptoStream, он выдает следующую ошибку:

«Поток не поддерживает поиск». Для пояснения, в приведенном выше коде нет обработки ошибок, поэтому, если вы просто запустите эту команду, то, конечно, не сломаетесь. Но, шагая по коду, объект CryptoStream покажет эту ошибку в своих свойствах после инициализации.

Почему это? И как мне этого избежать?

Ответы [ 3 ]

7 голосов
/ 26 октября 2009

То есть код на самом деле выполняется без исключения, но проблема в том, что когда вы смотрите на свойства в отладчике? Если это так, это просто - некоторые свойства (например, Position) зависят от возможности поиска в потоке. Вы не можете сделать это с CryptoStream - поэтому оценка свойства не удалась.

Тебе не нужно этого избегать - все отлично.

0 голосов
/ 01 мая 2013

Чтобы избежать этой проблемы, его гораздо проще использовать:

    using (var reader = new StreamReader(csEncrypt))
    {
        return reader.ReadToEnd();
    }
0 голосов
/ 26 октября 2009

Можете ли вы использовать один из конструкторов в MemoryStream, где вы передаете true для записываемого параметра?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...