Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.51/55: Рейтинг темы: голосов - 55, средняя оценка - 4.51
0 / 0 / 1
Регистрация: 07.08.2017
Сообщений: 18

Заполнение неверно и не может быть удалено

16.12.2017, 02:38. Показов 10557. Ответов 7

Студворк — интернет-сервис помощи студентам
Доброго всем дня!

Нужна помощь с дешифровкой сообщения по AES.
Получаю ошибку "Заполнение неверно и не может быть удалено" когда пытаюсь расшифровать массив байт.
Ниже приведу коды методов дешифровки и шифровки.

Как все происходит:
1)Пользователь вводит сообщение в программе-клиенте
2)Сообщение шифруется и на выходе получаем массив байт
3)Массив передается на программу-сервер где рассылается другим пользователям (что бы не загромождать тему кучей кода, вот ссылка на мою тему с кодами сервера и клиента, если нужно посмотреть как отправляется массив -- Тема)
4)Программа-клиент получая массив дешифрует его и выводит в виде строки

Ошибка появляется если пытаться расшифровать полученный массив. Полазив по гуглу и прочитав кучу текста - ответа не нашел.
Если же расшифровывать массив там же где он шифруется - то все нормально, исходя из этого я предполагаю что массив повреждается при передаче. Что бы это проверить я записал элементы массива в файл и сравнил с исходным, в результате обнаружилось что добавляются нули. Попытался их отсечь в цикле - все равно тоже самое.
Вручную задавал массив приходящий в ответ (полностью идентичны) и пытался расшифровать - та же ошибка.
Само сообщение изначально (без шифровки) нормально передается в массиве который берется строкой Encoding.Unicode.GetBytes(message).

Помогите пожалуйста разобраться, уже мозги от этого плавятся.


Шифровка:
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
static byte[] EncryptStringToBytesAes(string plainText, byte[] Key, byte[] IV)
        {
            // Проверка аргументов
            if (plainText == null || plainText.Length <= 0)
                throw new ArgumentNullException("plainText");
            if (Key == null || Key.Length <= 0)
                throw new ArgumentNullException("Key");
            if (IV == null || IV.Length <= 0)
                throw new ArgumentNullException("IV");
            byte[] encrypted;
 
            // Создаем объект класса AES
            // с определенным ключом and IV.
            using (Aes aesAlg = Aes.Create())
            {
                aesAlg.Key = Key;
                aesAlg.IV = IV;
 
                // Создаем объект, который определяет основные операции преобразований.
                ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
 
                // Создаем поток для шифрования.
                using (var msEncrypt = new MemoryStream())
                {
                    using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                    {
                        using (var swEncrypt = new StreamWriter(csEncrypt))
                        {
                            //Записываем в поток все данные.
                            swEncrypt.Write(plainText);
                        }
                        encrypted = msEncrypt.ToArray();
                    }
                }
            }
 
 
            //Возвращаем зашифрованные байты из потока памяти.
            return encrypted;
 
        }

Расшифровка:
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
static string DecryptStringFromBytesAes(byte[] cipherText, byte[] Key, byte[] IV)
        {
            // Проверяем аргументы
            if (cipherText == null || cipherText.Length <= 0)
                throw new ArgumentNullException("cipherText");
            if (Key == null || Key.Length <= 0)
                throw new ArgumentNullException("Key");
            if (IV == null || IV.Length <= 0)
                throw new ArgumentNullException("IV");
 
            // Строка, для хранения расшифрованного текста
            string plaintext;
 
            // Создаем объект класса AES,
            // Ключ и IV
            using (Aes aesAlg = Aes.Create())
            {
                aesAlg.Key = Key;
                aesAlg.IV = IV;
 
                // Создаем объект, который определяет основные операции преобразований.
                ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
 
                // Создаем поток для расшифрования.
                using (var msDecrypt = new MemoryStream(cipherText))
                {
                    using (var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                    {
                        using (var srDecrypt = new StreamReader(csDecrypt))
                        {
 
                            // Читаем расшифрованное сообщение и записываем в строку
                            plaintext = srDecrypt.ReadToEnd();
                        }
                    }
                }
 
            }
 
            return plaintext;
 
        }
Пробовал и другие методы - тоже самое.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.12.2017, 02:38
Ответы с готовыми решениями:

AES шифрование. Заполнение неверно и не может быть удалено
На строке cs.Close(); возникает ошибка: Заполнение неверно и не может быть удалено. Что делать? using System; using...

CryptographicException: "заполнение неверно и не может быть удалено."
Здравствуйте. Подскажите пожалуйста. Делаю ПО с привязкой к железу, шифрование идет как нужно. Вот код: public void...

Неверно происходит чтение файла. Что может быть не так ?
Доброго времени суток ! Пожалуйста, помогите исправить ошибки. Столкнулся с такой проблемой, данные считываются из файла, но неверно. В...

7
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
16.12.2017, 03:45
Код рабочий, ищите проблему в другом месте.

Цитата Сообщение от Zeus42 Посмотреть сообщение
предполагаю что массив повреждается при передаче
0
0 / 0 / 1
Регистрация: 07.08.2017
Сообщений: 18
16.12.2017, 18:37  [ТС]
Я бы рад, но я даже не знаю где копать...
0
0 / 0 / 1
Регистрация: 07.08.2017
Сообщений: 18
16.12.2017, 23:16  [ТС]
Ниже я приведу два изображения, описание будет на них.

На первом фото в черных скобках закриптованное сообщение в строке Base64, как видно - строка полученная на сервере идентична оригинальной (помечена желтым в окне Teamviewer'а), значит данные не повреждаются при передаче.
В синих скобках дешифровка этой строки и как результат - все работает, это видно по результату в красных скобках.



Описание кода на самой второй пикче.

Как видно из скрина, после манипуляций с принятой строкой на сервере мы получаем массив, идентичный оригинальному, значит все работает. НО!!! Дешифровка все так же не происходит, с той же ошибкой.
Я уже не знаю где искать, если дело не в передаче.
Какой-то конкретики в исключении - нет, что именно не так.
Люди говорят что нужно копать глубже, так как эта ошибка идет "из глубин".
Прошу помощи!!!
0
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
16.12.2017, 23:41
Лучший ответ Сообщение было отмечено Zeus42 как решение

Решение

Zeus42,
C#
1
2
3
var myAes = Aes.Create();
//...
data2 = EncryptStringToBytesAes(message, myAes.Key, myAes.IV);
Вы же каждый раз зашифровываете/расшифровываете случайными ключом и вектором. Очевидно, что при каждом запуске и у каждого они будут разными.
1
0 / 0 / 1
Регистрация: 07.08.2017
Сообщений: 18
17.12.2017, 00:37  [ТС]
Вы правы. Спасибо!!!
Попробовал метод шифровки с заданием пароля - заработало.
Сообщения передаются и принимаются, все вроде норм.
НО, появилась непонятная для меня ошибка, которую раньше я не видел работая с программой.
Когда я закрывал окно клиента - на сервере отображалось: "/имя_пользователя/ покинул чат" и все, а сейчас оно так же показывает эту надпись но уже с ошибкой (ниже), и подключится уже не получается, ниже будут обновленный код сервера и принимающей части.

"Не удается прочитать данные из транспортного соединения: Удаленный хост принудительно разорвал существующее подключение"

Что это может быть?

Сервер:
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
    public class ServerObject
    {
        public string IP;
        public int PORT;
        static TcpListener tcpListener; // сервер для прослушивания
        List<ClientObject> clients = new List<ClientObject>(); // все подключения
 
        protected internal void AddConnection(ClientObject clientObject)
        {
            clients.Add(clientObject);
        }
        protected internal void RemoveConnection(string id)
        {
            // получаем по id закрытое подключение
            ClientObject client = clients.FirstOrDefault(c => c.Id == id);
            // и удаляем его из списка подключений
            if (client != null)
                clients.Remove(client);
        }
        // прослушивание входящих подключений
        protected internal void Listen()
        {
 
            IP = ConfigurationManager.AppSettings.Get("ip");
            PORT = Convert.ToInt32(ConfigurationManager.AppSettings.Get("port"));
            try
            {
                tcpListener = new TcpListener(IPAddress.Parse(IP), port: PORT);
                tcpListener.Start();
                Console.Beep(308, 200);
                Console.Beep(372, 200);
                Console.Beep(495, 200);
 
                string start = "Сервер запущен. Ожидание подключений...";
                var line = "╔" + new string('═', start.Length + 2) + "╗";
                var line2 = "╚" + new string('═', start.Length + 2) + "╝";
 
                Console.WriteLine(line);
                Console.WriteLine("║ " + start + " ║");
                Console.WriteLine(line2);
                Console.WriteLine("===============");
 
                while (true)
                {
                    TcpClient tcpClient = tcpListener.AcceptTcpClient();
 
                    ClientObject clientObject = new ClientObject(tcpClient, this);
                    Thread clientThread = new Thread(new ThreadStart(clientObject.Process));
                    clientThread.Start();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadKey();
                Disconnect();
            }
        }
 
        // трансляция сообщения подключенным клиентам
        protected internal void BroadcastMessage(string message, string id)
        {
            message = Convert.ToBase64String(Encrypt(message, "1234"));
            byte[] data = Encoding.UTF8.GetBytes(message);
            for (int i = 0; i < clients.Count; i++)
            {
                if (clients[i].Id != id) // если id клиента не равно id отправляющего
                {
                    clients[i].Stream.Write(data, 0, data.Length); //передача данных
                }
            }
        }
        // отключение всех клиентов
        protected internal void Disconnect()
        {
            tcpListener.Stop(); //остановка сервера
 
            for (int i = 0; i < clients.Count; i++)
            {
                clients[i].Close(); //отключение клиента
            }
            Environment.Exit(0); //завершение процесса
        }
 
        private static byte[] Encrypt(string clearText, string EncryptionKey)
        {
 
            byte[] clearBytes = Encoding.UTF8.GetBytes(clearText);
            byte[] encrypted;
            using (Aes encryptor = Aes.Create())
            {
                Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 }); // еще один плюс шарпа в наличие таких вот костылей.
                encryptor.Key = pdb.GetBytes(32);
                encryptor.IV = pdb.GetBytes(16);
                using (MemoryStream ms = new MemoryStream())
                {
                    using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
                    {
                        cs.Write(clearBytes, 0, clearBytes.Length);
                        cs.Close();
                    }
                    encrypted = ms.ToArray();
                }
            }
            return encrypted;
        }
    }
 
    public class ClientObject
    {
        protected internal string Id { get; private set; }
        protected internal NetworkStream Stream { get; private set; }
        string userName;
        public byte[] DATA = new byte[64];
        TcpClient client;
        ServerObject server; // объект сервера
 
        public ClientObject(TcpClient tcpClient, ServerObject serverObject)
        {
            Id = Guid.NewGuid().ToString();
            client = tcpClient;
            server = serverObject;
            serverObject.AddConnection(this);
        }
 
        public void Process()
        {
            try
            {
                Stream = client.GetStream();
                // получаем имя пользователя
                string message = GetMessage();
                if (message != "aa")
                {
                    userName = message;
                    message = userName + " вошел в чат";
                    var line = "╔" + new string('═', message.Length + 2) + "╗";
                    var line2 = "╚" + new string('═', message.Length + 2) + "╝";
                    // посылаем сообщение о входе в чат всем подключенным пользователям
                    server.BroadcastMessage(message, this.Id);
                    Console.Beep(308, 250);
                    Console.WriteLine(line);
                    Console.WriteLine("║ " + message + " ║");
                    Console.WriteLine(line2);
                    Console.WriteLine("===============");
                }
                    // в бесконечном цикле получаем сообщения от клиента
                    while (true)
                    {
                        try
                        {
                            var line = "╔" + new string('═', message.Length + 2) + "╗";
                            var line2 = "╚" + new string('═', message.Length + 2) + "╝";
                            message = GetMessage();
                            message = message.ToString();
 
                            string[] UName = message.Split(' ');
 
                            line = "╔" + new string('═', UName[0].Length + 2) + "╗";
                            line2 = "╚" + new string('═', UName[0].Length + 2) + "╝";
 
                            Console.Beep(460, 250);
                            Console.WriteLine(line);
                            Console.WriteLine("║ " + UName[0] + " ║" + " " + message.Substring(UName[0].Length + 1));
                            Console.WriteLine(line2);
                            server.BroadcastMessage(message, this.Id);
                        }
                        catch(Exception e)
                        {
                           
                                var line = "╔" + new string('═', message.Length + 2) + "╗";
                                var line2 = "╚" + new string('═', message.Length + 2) + "╝";
                                Console.Beep(290, 250);
                                Console.WriteLine("===============");
                                message = String.Format("{0} покинул чат", userName);
                                line = "╔" + new string('═', message.Length + 2) + "╗";
                                line2 = "╚" + new string('═', message.Length + 2) + "╝";
                                Console.WriteLine(line);
                                Console.WriteLine("║ " + message + " ║");
                                Console.WriteLine(line2);
                                Console.WriteLine("===============");
                                Console.WriteLine(e.Message + "Process");
                                if (userName != "" && userName != null && message != " " && message != "" && userName != " ")
                                {
                                    server.BroadcastMessage(message, this.Id);
                                }
                                break;
                        }
                    }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message + "Process");
                Console.ReadKey();
            }
            finally
            {
                // в случае выхода из цикла закрываем ресурсы
                server.RemoveConnection(this.Id);
                Close();
            }
        }
 
        // чтение входящего сообщения и преобразование в строку
        private string GetMessage()
        {
            byte[] data = new byte[64]; // буфер для получаемых данных
            StringBuilder builder = new StringBuilder();
            int bytes = 0;
            do
            {
                var myAes = Aes.Create();
 
                
 
                bytes = Stream.Read(data, 0, data.Length);
                byte[] data2 = new byte[64];
                data2 = Convert.FromBase64String(Encoding.UTF8.GetString(data, 0, bytes));
                DATA = data2;
                
                builder.Append(Decrypt(Convert.FromBase64String(Encoding.UTF8.GetString(data, 0, bytes)), "1234"));
            }
            while (Stream.DataAvailable);
 
            return builder.ToString();
        }
 
        static string DecryptStringFromBytesAes(byte[] cipherText, byte[] Key, byte[] IV)
        {
            // Проверяем аргументы
            if (cipherText == null || cipherText.Length <= 0)
                throw new ArgumentNullException("cipherText");
            if (Key == null || Key.Length <= 0)
                throw new ArgumentNullException("Key");
            if (IV == null || IV.Length <= 0)
                throw new ArgumentNullException("IV");
 
            // Строка, для хранения расшифрованного текста
            string plaintext;
 
            // Создаем объект класса AES,
            // Ключ и IV
            using (Aes aesAlg = Aes.Create())
            {
                aesAlg.Key = Key;
                aesAlg.IV = IV;
 
                // Создаем объект, который определяет основные операции преобразований.
                ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
 
                // Создаем поток для расшифрования.
                using (var msDecrypt = new MemoryStream(cipherText))
                {
                    using (var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                    {
                        using (var srDecrypt = new StreamReader(csDecrypt))
                        {
 
                            // Читаем расшифрованное сообщение и записываем в строку
                            plaintext = srDecrypt.ReadToEnd();
                        }
                        csDecrypt.Close();
                    }
                }
 
            }
 
            return plaintext;
 
        }
 
        private static string Decrypt(byte[] cipherBytes, string EncryptionKey)
        {
            string cipherText = "";
            using (Aes encryptor = Aes.Create())
            {
                Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
                encryptor.Key = pdb.GetBytes(32);
                encryptor.IV = pdb.GetBytes(16);
                using (MemoryStream ms = new MemoryStream())
                {
                    using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write))
                    {
                        cs.Write(cipherBytes, 0, cipherBytes.Length);
                        cs.Close();
                    }
                    cipherText = Encoding.UTF8.GetString(ms.ToArray());
                }
            }
            return cipherText;
        }
 
        // закрытие подключения
        protected internal void Close()
        {
            if (Stream != null)
                Stream.Close();
            if (client != null)
                client.Close();
        }
    }
 
    class Program
    {
        static ServerObject server; // сервер
        static Thread listenThread; // потока для прослушивания
        static void Main(string[] args)
        {
            Console.Title = "Сервер";
            try
            {
                server = new ServerObject();
                listenThread = new Thread(new ThreadStart(server.Listen));
                listenThread.Start(); //старт потока
            }
            catch (Exception ex)
            {
                server.Disconnect();
                Console.WriteLine(ex.Message);
                Console.ReadKey();
            }
        }
    }
Принимающая часть:
(В ней, если отрубался сервер - писало "Подключение прервано!", сейчас же только эта ошибка.)

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
    class Program
    {
        public static string host = "t.t.t.t";
        static TcpClient client;
        static NetworkStream stream;
 
        public static void Main(string[] args)
        {
            Console.Title = "Окно сообщений";
            string Greeting = "║ Окно сообщений запущено... ║";
            var line = "╔" + new string('═', Greeting.Length - 2) + "╗";
            var line2 = "╚" + new string('═', Greeting.Length - 2) + "╝";
            Console.Beep(308, 250);
            Console.WriteLine(line);
            Console.WriteLine(Greeting);
            Console.WriteLine(line2);
            client = new TcpClient();
            try
            {
                client.Connect(host, 15000); //подключение клиента
                stream = client.GetStream(); // получаем поток
 
 
                string message = "aa";
                message = Convert.ToBase64String(Encrypt(message, "1234"));
                byte[] data = Encoding.UTF8.GetBytes(message);
                stream.Write(data, 0, data.Length);
 
                // запускаем новый поток для получения данных
                Thread receiveThread = new Thread(new ThreadStart(ReceiveMessage));
                receiveThread.Start(); //старт потока
                Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message + "Main");
                Console.ReadKey();
            }
            finally
            {
                Disconnect();
            }
        }
        // получение сообщений
        static void ReceiveMessage()
        {
            while (true)
            {
                try
                {
                    byte[] data = new byte[64]; // буфер для получаемых данных
                    StringBuilder builder = new StringBuilder();
                    int bytes = 0;
                    do
                    {
                            bytes = stream.Read(data, 0, data.Length);
                            byte[] data2 = new byte[64];
                            data2 = Convert.FromBase64String(Encoding.UTF8.GetString(data, 0, bytes));
                            builder.Append(Decrypt(Convert.FromBase64String(Encoding.UTF8.GetString(data, 0, bytes)), "1234"));
                    }
                    while (stream.DataAvailable);
                    {
                        string message = builder.ToString();
                        if (message != "")
                        {
                            string[] UName = message.Split(' ');
 
                            string line = "╔" + new string('═', UName[0].Length + 2) + "╗";
                            string line2 = "╚" + new string('═', UName[0].Length + 2) + "╝";
 
                            Console.Beep(460, 250);
                            Console.WriteLine(line);
                            Console.WriteLine("║ " + UName[0] + " ║" + " " + message.Substring(UName[0].Length + 1));
                            Console.WriteLine(line2);
                        }
                    }
                }
                catch(Exception e)
                {
                    Console.Beep(250, 200);
                    Console.Beep(250, 200);
                    Console.Beep(250, 200);
 
                    Console.WriteLine(e.Message + "ReceiveMessage");
                    Console.ReadKey();
                    string s = "Подключение прервано!";
                    string line = "╔" + new string('═', s.Length + 2) + "╗";
                    string line2 = "╚" + new string('═', s.Length + 2) + "╝";
 
                    Console.WriteLine(line);
                    Console.WriteLine("║ " + s + " ║"); //соединение было прервано
                    Console.WriteLine(line2);
                    Console.ReadLine();
                    Disconnect();
                }
            }
        }
 
        private static string Decrypt(byte[] cipherBytes, string EncryptionKey)
        {
            string cipherText = "";
            using (Aes encryptor = Aes.Create())
            {
                Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
                encryptor.Key = pdb.GetBytes(32);
                encryptor.IV = pdb.GetBytes(16);
                using (MemoryStream ms = new MemoryStream())
                {
                    using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write))
                    {
                        cs.Write(cipherBytes, 0, cipherBytes.Length);
                        cs.Close();
                    }
                    cipherText = Encoding.UTF8.GetString(ms.ToArray());
                }
            }
            return cipherText;
        }
 
        private static byte[] Encrypt(string clearText, string EncryptionKey)
        {
 
            byte[] clearBytes = Encoding.UTF8.GetBytes(clearText);
            byte[] encrypted;
            using (Aes encryptor = Aes.Create())
            {
                Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 }); // еще один плюс шарпа в наличие таких вот костылей.
                encryptor.Key = pdb.GetBytes(32);
                encryptor.IV = pdb.GetBytes(16);
                using (MemoryStream ms = new MemoryStream())
                {
                    using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
                    {
                        cs.Write(clearBytes, 0, clearBytes.Length);
                        cs.Close();
                    }
                    encrypted = ms.ToArray();
                }
            }
            return encrypted;
        }
 
        static void Disconnect()
        {
            if (stream != null)
                stream.Close();//отключение потока
            if (client != null)
                client.Close();//отключение клиента
            Environment.Exit(0); //завершение процесса
        }
    }
Сразу извиняюсь за нубизм.
0
0 / 0 / 1
Регистрация: 07.08.2017
Сообщений: 18
17.12.2017, 00:59  [ТС]
Вот доп. информация по исключению:
Exception
0
0 / 0 / 1
Регистрация: 07.08.2017
Сообщений: 18
17.12.2017, 01:08  [ТС]
Я немножко идиот, извините...
Надо было убрать вывод сообщения об исключении в консоль и "Exception e" в catch
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.12.2017, 01:08
Помогаю со студенческими работами здесь

"В поле может быть введено только одно слово, пробелы могут быть или не быть с начала слова и в конце"
Добрый вечер уважаемые форумчане. Подскажите как написать выражение со след условием: -в поле может быть введено только одно слово,...

Может ли быть данная функция быть функцией распределения некоторой случайной величины?
Может ли быть функция F(x)= |sinx| быть функцией распределения некоторой случайной величины? Почему?

Заполнение StringGrid из Edit неверно начинается
Есть 6 edit-ов на 2-ой форме, после добавление записи... Заполнение начинается именно с 6-ой строки массива, а не с 1-ой. Помогите...

Неверно отображается заполнение прогрессбара в элементах ListView
Добрый день. Мне нужно создать ListView, в элементах которого отображается ProgressBar нестандартного цвета. В методе getView моего списка...

Regex может быть символ а может и нет
var matches = Regex.Matches(page, @&quot;\S&quot;); Например есть строки &quot;жрать&quot; и &quot;нежрать&quot;, 4 символа будут 100% а вот 6 не всегда. Как...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru