Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
18 / 13 / 10
Регистрация: 06.11.2016
Сообщений: 58
.NET 4.x

При расшифровке сообщения выводится System.Byte[]

29.04.2018, 18:14. Показов 2035. Ответов 7

Студворк — интернет-сервис помощи студентам
Шифрую строковую переменную при помощи AES-256 из стандартной библиотеки.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static byte[] Encrypt(byte[] originalText, byte[] key = null, byte[] iv = null)
        {
            key = AesEncoder.key;
            iv = AesEncoder.iv;
 
            encryptor = new AesCryptoServiceProvider().CreateEncryptor(key, iv);
 
            using (MemoryStream msEncrypt = new MemoryStream())
            {
                using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                {
                    using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                    {
                        swEncrypt.Write(originalText);
                    }
                    return msEncrypt.ToArray();
                }
            }
        }
Потом пытаюсь расшифровать, но получаю на выходе не расшифрованную строку, а System.Byte[]

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
34
35
public static string Decrypt(byte[] encryptedText, byte[] key = null, byte[] iv = null)
        {
            key = AesEncoder.key;
            iv = AesEncoder.iv;
            
            encryptor = new AesCryptoServiceProvider().CreateDecryptor(key, iv);
 
            using (Aes aesAlg = Aes.Create())
            {
                aesAlg.Key = key;
                aesAlg.IV = iv;
 
                // Create a decrytor to perform the stream transform.
                ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
 
                // Create the streams used for decryption.
                using (MemoryStream msDecrypt = new MemoryStream(encryptedText))
                {
                    using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                    {
                        using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                        {
                            // Read the decrypted bytes from the decrypting stream
                            // and place them in a string.
                            int size = Encoding.Default.GetString(encryptedText).Length;
                            byte[] sd = new byte[size];
                            csDecrypt.Read(sd, 0, size);
                            Console.WriteLine(sd);
 
                            return "";
                        }
                    }
                }
            }
        }
Здесь я обращаюсь к функциям
C#
1
2
3
4
5
6
7
8
9
10
static void Main(string[] args)
        {
            string originalText = "Сообщение №1";
            Console.WriteLine("Оригинальный текст:{0}", originalText);
            byte[] encryptedText = AesEncoder.Encrypt(Encoding.Default.GetBytes(originalText));
            Console.WriteLine(Encoding.Default.GetString(encryptedText));
            AesEncoder.Decrypt(encryptedText);
 
            Console.ReadLine();
        }
Миниатюры
При расшифровке сообщения выводится System.Byte[]  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.04.2018, 18:14
Ответы с готовыми решениями:

При чтении таблицы выдает System.Byte[]
Всем доброго времени! Прошу посоветовать решение. Существует таблица, в которой поле _IDRRef имеет формат данных как binary(16). ...

System.InvalidCastException: "Не удалось привести тип объекта "System.Byte[]" к типу "System.Drawing.Bitmap"."
Ошибка System.InvalidCastException: "Не удалось привести тип объекта "System.Byte" к типу "System.Drawing.Bitmap"." Как...

В textBox всегда выводится System.Byte[]
FileStream^ f = gcnew FileStream(OFD->FileName, FileMode::Open, FileAccess::Read, FileShare::Read); array<BYTE>^ buf = gcnew...

7
 Аватар для netBool
325 / 304 / 173
Регистрация: 16.11.2010
Сообщений: 1,069
Записей в блоге: 9
29.04.2018, 19:34
novagc, надо правильно распаковать System.Byte[] в String через Encoding.Default.GetString. Попробуй:
C#
1
 Console.WriteLine(Encoding.Default.GetString(sd));
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
30.04.2018, 09:37
novagc, а почему у вас везде используется Encoding.Default?
0
18 / 13 / 10
Регистрация: 06.11.2016
Сообщений: 58
30.04.2018, 10:25  [ТС]
Потому что, насколько я знаю, Encoding.Default - кодировка, используемая системой.

P.S. В самом вопросе в коде у меня действительно ошибка. В функции Decrypt должно быть так.
C#
1
 Console.WriteLine(Encoding.Default.GetString(sd));
Но проблема не решена. Всё равно выводится System.Byte[]
0
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
30.04.2018, 10:46
Может шифровать сначала нужно тоже строку, а не массив байтов?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
30.04.2018, 10:56
Цитата Сообщение от novagc Посмотреть сообщение
Потому что, насколько я знаю, Encoding.Default - кодировка, используемая системой.
Верно!
Так ведь получается, что текст, зашифрованный на одной системе, вполне может быть расшифрован в белиберду на другой системе с другой кодировкой.
Если планируется переносить зашифрованный текст с одной системы на другую, то может вместо кодировки по умолчанию имеет смысл использовать какую-нибудь заранее выбранную, например UTF8?

Цитата Сообщение от novagc Посмотреть сообщение
Но проблема не решена. Всё равно выводится System.Byte[]
А вы исправили строку? Как сейчас код выглядит?
0
18 / 13 / 10
Регистрация: 06.11.2016
Сообщений: 58
30.04.2018, 11:28  [ТС]
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
static void Main(string[] args)
        {
            string originalText = "Сообщение №1";
            Console.WriteLine("Оригинальный текст:{0}", originalText);
            byte[] encryptedText = AesEncoder.Encrypt(Encoding.UTF8.GetBytes(originalText));
            Console.WriteLine(Encoding.UTF8.GetString(encryptedText));
            Console.WriteLine(AesEncoder.Decrypt(encryptedText));
 
            Console.ReadLine();
        }
public static byte[] Encrypt(byte[] originalText)
        {
            using (Aes aesAlg = Aes.Create())
            {
                aesAlg.Key = key;
                aesAlg.IV = iv;
                encryptor = aesAlg.CreateEncryptor();
 
                using (MemoryStream msEncrypt = new MemoryStream())
                {
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                    {
                        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                        {
                            swEncrypt.Write(originalText);
                        }
                        return msEncrypt.ToArray();
                    }
                }
                
            }
        }
 
        public static string Decrypt(byte[] encryptedText)
        {
            using (Aes aesAlg = Aes.Create())
            {
                aesAlg.Key = key;
                aesAlg.IV = iv;
                encryptor = aesAlg.CreateDecryptor();
 
                using (MemoryStream msDecrypt = new MemoryStream(encryptedText))
                {
                    using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, encryptor, CryptoStreamMode.Read))
                    {
                        using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                        {
                            return srDecrypt.ReadToEnd();
                        }
                    }
                }
            }
        }
А вывод:

Оригинальный текст:Сообщение №1
*p?^8?JwY??{
System.Byte[]
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
30.04.2018, 11:49
Лучший ответ Сообщение было отмечено novagc как решение

Решение

Цитата Сообщение от novagc Посмотреть сообщение
C#
1
swEncrypt.Write(originalText);
У класса StreamWriter нет перегрузки метода Write, принимающей массив байт.
Но есть перегрузка, принимающая object и переводящая его в строковое представление — именно она у вас и используется.

Зачем вам при шифровании вообще нужен StreamWriter, если вы пишете не текст, а байты?
Выбросьте его и пишите сразу в csEncrypt.
Как вариант, передавайте в метод не байты, а текст и пишите этот текст через swEncrypt. Только учтите, что StreamWriter по умолчанию использует кодировку UTF8.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.04.2018, 11:49
Помогаю со студенческими работами здесь

Ошибка "E2015 Ambiguity between 'Byte' and 'System::Byte'"
Всем привет. Суть проблемы в следующем при подключение сторонних исходников в моём проекте выходят такие ошибки Как можно...

В файле mail.tpl не выводится заголовок сообщения {$subject} и текст сообщения {$message}
ребят помогите разобраться, изначально у меня все выводилось через функцию popupWindow вот сама функция JS function...

System.Byte
Подскажите пожалуйста,как можно сделать нормально вывод данных из бд в reader до этого был код,который выводил в textBox то что надо...

При включении компьютера выводится сообщение "Missing operation system"
Доигрался я с установкой линукса и случайно что-то сделал с винчестером Windows 10. Сейчас при включении компьютера выводит сообщение...

При выполнении system ("cls") выводится только первый русскоязычный символ
Поймал неприятную ситуацию. Пишу в CLion, MinGW-64 x86_64-4.9.3-win32-seh-rt_v4-rev1. При выполнении system("cls") выводится...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru