Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Его Правительские Звания
124 / 103 / 34
Регистрация: 13.07.2017
Сообщений: 2,063
Записей в блоге: 3
1

MemoryStream разрушается при присваивании

18.08.2020, 10:23. Показов 485. Ответов 16
Метки нет (Все метки)

Пытаюсь выполнить следующий код:
C#
1
2
3
4
5
6
7
8
9
10
11
                ICryptoTransform crypt = encryption2.CreateDecryptor();
                using (MemoryStream ms = new MemoryStream(encrypted))
                {
                    using (CryptoStream cs = new CryptoStream(ms, crypt, CryptoStreamMode.Read))
                    {
                        using (StreamReader sr = new StreamReader(cs))
                        {
                            decrypted = sr.ReadToEnd();
                        }
                    }
                }
На второй строке творится нечто парадоксальное. Если ввести в контрольные значения new System.IO.MemoryStream(encrypted), получается нормальный поток, с позицией и длиной, а при присваивании этого потока переменной позиция и длина разрушаются (скриншот). Кто знает, в чем здесь ошибка?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Миниатюры
MemoryStream разрушается при присваивании  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.08.2020, 10:23
Ответы с готовыми решениями:

Изменение значений массивов при присваивании
Присваиваю массиву ExampleCodeCombination значение другого массива. при проверке в ифе или елсе...

Почему при присваивании значения некоторым объектам ссылочного типа копируется не ССЫЛКА, а само значение?
Здравствуйте! Пытаюсь докопаться до сути ссылочных и значимых типов данных. Во многих источниках...

Ошибка Assignment t o FOR-Loop variable при при присваивании переменной значения
При написании программы вылезла ошибка: ... (137): Assignment t o FOR-Loop variable 'i'. Я не могу...

Программа выдает разные результаты при присваивании значения переменной в коде и при вводе с клавиатуры
Просто вопрос. У меня программа выдает разные результаты при присваивании значения переменной в...

16
4814 / 3279 / 1389
Регистрация: 09.05.2015
Сообщений: 8,073
18.08.2020, 10:31 2
Где конкретно вы ставите точку останова?
1
Его Правительские Звания
124 / 103 / 34
Регистрация: 13.07.2017
Сообщений: 2,063
Записей в блоге: 3
18.08.2020, 10:33  [ТС] 3
Я прохожу пошагово, начиная с самого верха этого фрагмента, и обнаруживаю это сразу после того, как присваивание выполнено (желтая стрелка на третьей строке).
0
4814 / 3279 / 1389
Регистрация: 09.05.2015
Сообщений: 8,073
18.08.2020, 10:50 4
Для теста написал код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
            Aes aes = Aes.Create();
            byte[] encrypted = new byte[1000];
            ICryptoTransform crypt = aes.CreateDecryptor();
            using (MemoryStream ms = new MemoryStream(encrypted))
            {
                using (CryptoStream cs = new CryptoStream(ms, crypt, CryptoStreamMode.Read))
                {
                    using (StreamReader sr = new StreamReader(cs))
                    {
                        string decrypted = sr.ReadToEnd();
                    }
                }
            }
и с MemoryStream проблем не увидел, все корректно отображается в отладчике...
Конечно же код валится дальше на чтении, т.к. данные для расшифровки неверные.
1
Его Правительские Звания
124 / 103 / 34
Регистрация: 13.07.2017
Сообщений: 2,063
Записей в блоге: 3
18.08.2020, 10:56  [ТС] 5
Цитата Сообщение от Someone007 Посмотреть сообщение
Конечно же код валится дальше на чтении, т.к. данные для расшифровки неверные.
А у меня как раз данные для расшифровки верные. Может быть, у меня Visual Studio не та? Может быть, какую-то настройку не ту случайно зацепил? Возможно такое?
0
Эксперт .NET
8942 / 6256 / 1043
Регистрация: 21.01.2016
Сообщений: 23,695
18.08.2020, 11:01 6
Etyuhibosecyu, нет. Скорее всего отладчиком как-то не так воспользовались. Ни данные ни версия студии не дают такого поведения.

Добавлено через 4 минуты
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Если ввести в контрольные значения new System.IO.MemoryStream(encrypted), получается нормальный поток, с позицией и длиной
Меня вот эта фраза смущает. Что вы и зачем делаете?
1
Его Правительские Звания
124 / 103 / 34
Регистрация: 13.07.2017
Сообщений: 2,063
Записей в блоге: 3
18.08.2020, 11:05  [ТС] 7
Цитата Сообщение от Usaga Посмотреть сообщение
Скорее всего отладчиком как-то не так воспользовались.
Так даже без отладчика на чтении вылетает исключение "Заполнение неверно и не может быть удалено." типа CryptographicException, хотя, как я уже написал, данные для расшифровки верные.
Цитата Сообщение от Usaga Посмотреть сообщение
Меня вот эта фраза смущает. Что вы и зачем делаете?
Первый раз слышите про контрольные значения?
0
Эксперт .NET
8942 / 6256 / 1043
Регистрация: 21.01.2016
Сообщений: 23,695
18.08.2020, 11:08 8
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Так даже без отладчика на чтении вылетает исключение "Заполнение неверно и не может быть удалено." типа CryptographicException, хотя, как я уже написал, данные для расшифровки верные.
Так это уже похоже на кривые данные, а не на то, что вы в первом посте указали.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Первый раз слышите про контрольные значения?
Я надеялся более подробное описание ваших действий увидеть, чтобы знать, что вы там на самом деле видите.
1
Его Правительские Звания
124 / 103 / 34
Регистрация: 13.07.2017
Сообщений: 2,063
Записей в блоге: 3
18.08.2020, 11:17  [ТС] 9
Цитата Сообщение от Usaga Посмотреть сообщение
Так это уже похоже на кривые данные, а не на то, что вы в первом посте указали.
А прямо MemoryStream, который НЕ ЗНАЕТ, для чего он будет использоваться, может разрушаться от кривых данных? Фишка в том, что разрушение MemoryStream и исключение происходят ОДНО ЗА ДРУГИМ.
Цитата Сообщение от Usaga Посмотреть сообщение
Я надеялся более подробное описание ваших действий увидеть, чтобы знать, что вы там на самом деле видите.
Вот, на скриншоте. Надеюсь, ничего крамольного не засветил.
0
Миниатюры
MemoryStream разрушается при присваивании  
Эксперт .NET
8942 / 6256 / 1043
Регистрация: 21.01.2016
Сообщений: 23,695
18.08.2020, 11:22 10
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
А прямо MemoryStream, который НЕ ЗНАЕТ, для чего он будет использоваться, может разрушаться от кривых данных?
Нет. Для него содержимое данных не имеет значения. CryptographicException явно кидается не из MemoryStream.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Вот, на скриншоте. Надеюсь, ничего крамольного не засветил.
Я просил описание ваших действий, а не скриншот состояния свойств MemoryObject.

В общем. Я так понимаю, что у вас в encrypted кривые данные, которые CryptoStream не может прожевать. Об этом вам не двусмысленно говорится как самим названием типа исключения, так и текста в нём.

А откуда фигня с кривотой в отладке - это я уж не знаю. Явно вы там намутили что-то.
2
Его Правительские Звания
124 / 103 / 34
Регистрация: 13.07.2017
Сообщений: 2,063
Записей в блоге: 3
18.08.2020, 11:28  [ТС] 11
Цитата Сообщение от Usaga Посмотреть сообщение
Я просил описание ваших действий, а не скриншот состояния свойств MemoryObject.
Не знаю, о каком описании речь. Дохожу до третьей строки кода в шапке, ввожу конструктор в контрольные значения, смотрю на него, затем на ms. Это не то описание?
Цитата Сообщение от Usaga Посмотреть сообщение
Я так понимаю, что у вас в encrypted кривые данные, которые CryptoStream не может прожевать. Об этом вам не двусмысленно говорится как самим названием типа исключения, так и текста в нём.
Может ли повлиять то, что я пытаюсь сделать в стиле Triple DES - зашифровать, расшифровать и снова зашифровать с разными ключами? То есть encrypted - это результат шифрования, но с другими ключом и IV. Только вместо DES у меня AES.
0
4814 / 3279 / 1389
Регистрация: 09.05.2015
Сообщений: 8,073
18.08.2020, 11:49 12
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Может ли повлиять то, что я пытаюсь сделать в стиле Triple DES - зашифровать, расшифровать и снова зашифровать с разными ключами? То есть encrypted - это результат шифрования, но с другими ключом и IV. Только вместо DES у меня AES.
Наверно может... Проверьте работает ли код при обычном нормальном использовании...

Добавлено через 6 минут
Вот еще тестовый код с реальными данными и всё работает...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
            Aes aes = Aes.Create();
 
            string text = "Text to encrypt!";
 
            byte[] encrypted;
 
            ICryptoTransform crypt = aes.CreateEncryptor();
            using (MemoryStream ms = new MemoryStream())
            {
                using (CryptoStream cs = new CryptoStream(ms, crypt, CryptoStreamMode.Write))
                {
                    using (StreamWriter sw2 = new StreamWriter(cs))
                    {
                        sw2.Write(text);
                    }
                }
 
                encrypted = ms.ToArray();
            }
 
            crypt = aes.CreateDecryptor();
            using (MemoryStream ms = new MemoryStream(encrypted))
            {
                using (CryptoStream cs = new CryptoStream(ms, crypt, CryptoStreamMode.Read))
                {
                    using (StreamReader sr = new StreamReader(cs))
                    {
                        string decrypted = sr.ReadToEnd();
 
                        Console.WriteLine(decrypted);
                    }
                }
            }
1
Его Правительские Звания
124 / 103 / 34
Регистрация: 13.07.2017
Сообщений: 2,063
Записей в блоге: 3
18.08.2020, 11:57  [ТС] 13
Да, если шифровать и расшифровывать одними IV и ключом, работает. Оказалось, я неправильно понял, что такое "заполнение" в тексте исключения. Один из вариантов заполнения, вероятно, должен подойти.
0
Эксперт .NET
8942 / 6256 / 1043
Регистрация: 21.01.2016
Сообщений: 23,695
18.08.2020, 12:12 14
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Дохожу до третьей строки кода в шапке, ввожу конструктор в контрольные значения, смотрю на него, затем на ms. Это не то описание?
Ещё раз... Куда и что вы вводите?
0
Его Правительские Звания
124 / 103 / 34
Регистрация: 13.07.2017
Сообщений: 2,063
Записей в блоге: 3
18.08.2020, 12:32  [ТС] 15
Usaga, тема неактуальна!
0
TrickyBestia
18.08.2020, 12:49
  #16

Не по теме:

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Да, если шифровать и расшифровывать одними IV и ключом, работает. Оказалось, я неправильно понял, что такое "заполнение" в тексте исключения. Один из вариантов заполнения, вероятно, должен подойти.
Начинает походить на поток сознания...

0
Администратор
Эксперт .NET
13271 / 10800 / 4456
Регистрация: 17.03.2014
Сообщений: 21,809
Записей в блоге: 1
22.08.2020, 19:46 17
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Если ввести в контрольные значения new System.IO.MemoryStream(encrypted)
Не надо вводить new что-там в контрольные значения. Это же создание нового экземпляра.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.08.2020, 19:46

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Ошибка при присваивании значения параметру
Приветствую! Не могу понять в чем может быть ошибка. Прошу помочь. Вот код: ...

Программа вылетает при присваивании экземпляров
Всем привет! В моём коде в строке 52 ошибка xmemory строка 1203 Вызвано исключение: нарушение...

Ошибка при присваивании значения параметру
Приветствую! Не могу понять в чем может быть ошибка. Прошу помочь. Вот код: ...

Использование постфиксного инкремента при присваивании
int main() { setlocale(LC_ALL,"Rus"); std::cout << __cplusplus; cout << endl; ...

Слетает прога при присваивании разименованованному указателю
Помогите плз! Не могу присвоить значение элементу строки; #include <iostream> using namespace...

При присваивании значения эл-ту массива изменяются предыдущие эл-ты
Visual Studio 2008, проект MFC (диалоговый). Фрагмент кода: int igap; CComboBox m_combo_year1;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.