Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 31.01.2014
Сообщений: 50
1

Открытие файла и его последующее шифрование/дешифрование (алгоритм DES)

06.06.2017, 18:31. Показов 1556. Ответов 3

Author24 — интернет-сервис помощи студентам
После открытия файла в textbox английские слова шифруются, а русские - нет. Как это можно исправить? И как исправить то, что некоторая часть шифрованного текста в результате превращается в квадраты?
Вот кода для открытия файла (с отображением русских букв в textbox помог пользователь под ником "Даценд" - спасибо ему еще раз):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void btnOpen_Click(object sender, EventArgs e)
        {
            EnOpenTextBox.Clear();
            EnSaveTextBox.Clear();
            OpenFileDialog open = new OpenFileDialog();
            open.Title = "Открыть файл";
            open.Filter = "Текстовые файлы (*.txt)|*.txt|Все файлы (*.*)|*.*";
            if (open.ShowDialog() == DialogResult.OK)
            {
                //StreamReader sr = new StreamReader(@"файл", Encoding.GetEncoding(1251));
 
                StreamReader read = new StreamReader(File.OpenRead(open.FileName), System.Text.Encoding.Default);
                EnOpenTextBox.Text = read.ReadToEnd();
                read.Dispose();
            }
        }
А вот код для шифрования/дешифрования:
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
#region Шифрование
        //шифрование данных
        private byte[] Encrypt(byte[] data, byte[] key, byte[] IV)
        {
            using (DESCryptoServiceProvider desCryptoProvider = new DESCryptoServiceProvider())
            {
                desCryptoProvider.Key = key;
                desCryptoProvider.IV = IV;
 
                return desCryptoProvider.CreateEncryptor().TransformFinalBlock(data, 0, data.Length);
            }
        }
        //дешифрование
        private byte[] Decrypt(byte[] data, byte[] key, byte[] IV)
        {
            using (DESCryptoServiceProvider desCryptoProvider = new DESCryptoServiceProvider())
            {
                desCryptoProvider.Key = key;
                desCryptoProvider.IV = IV;
 
                return desCryptoProvider.CreateDecryptor().TransformFinalBlock(data, 0, data.Length);
            }
        }
        //шифрование\дешифр 
        private void CryptStringStart(bool encrypt, bool useBuffer)
        {
 
            try
            {
                if (string.IsNullOrEmpty(EnOpenTextBox.Text))
                {
                    throw new FormatException("Строка с данными пустая!");
                }
 
                if (string.IsNullOrEmpty(EnTextboxCryptKey.Text))
                {
                    throw new FormatException("Строка с ключем пустая!");
                }
 
                if (string.IsNullOrEmpty(EnTextboxCryptIV.Text))
                {
                    throw new FormatException("Строка с IV пустая!");
                }
 
 
 
                byte[] key = Encoding.UTF8.GetBytes(EnTextboxCryptKey.Text);
 
                byte[] IV = Encoding.UTF8.GetBytes(EnTextboxCryptIV.Text);
                byte[] data = Encoding.UTF8.GetBytes(EnOpenTextBox.Text);
 
                byte[] finalData;
                if (encrypt)
                {
                    finalData = Encrypt(data, key, IV);
                    BufferDataDecrypt = finalData;
                }
                else
                {
                    if (useBuffer)
                    {
                        finalData = Decrypt(BufferDataDecrypt, key, IV);
                    }
                    else
                    {
                        finalData = Decrypt(data, key, IV);
                    }
 
                }
 
                string result = Encoding.UTF8.GetString(finalData);
                EnSaveTextBox.Text = result;
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message);
            }
        }
        #endregion
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.06.2017, 18:31
Ответы с готовыми решениями:

DES шифрование/дешифрование
Добрый день. Пишу реализацию шифрования алгоритмом DES. Зашифрованный и расшифрованный текст не...

Шифрование файлов Des - алгоритм
Кто может помочь с кодом,или хотя-бы что да как подсказать, пример Нужно сделать программу по...

Шифрование исходного текста и его дешифрование
Здравствуйте, нужна ваша помощь. Пытаюсь разработать WPF-приложение шифрования исходного текста и...

Шифрование и дешифрование файла
4. Реализовать в программе шифрование и дешифрацию файла с использованием квадрата Полибия,...

3
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,341
Записей в блоге: 1
07.06.2017, 02:44 2
Timur1994, главная ошибка в этой строке
C#
1
/* #71 */ string result = Encoding.UTF8.GetString(finalData);
Данный код исходит из того что можно взять произвольный набор байтов и превратить его в строку используя кодировку UTF-8. Это неверное предположение т.к. не каждый байт или последовательность байтов является правильном кодом их кодировки UTF-8. И если заменить эту строку на
C#
1
2
var encoding = Encoding.GetEncoding(65001, EncoderFallback.ExceptionFallback, DecoderFallback.ExceptionFallback);
string result = encoding.GetString(finalData);
то пробуя разные данные мы с большой вероятность получим исключение вида "Unable to translate bytes [??] at index -1 from specified code page to Unicode.". Можно заменить UTF-8 на какую-нибудь однобайтовую кодировку вроде windows-1251, но это подойдет только если мы собираемся шифровать только текст в рамках данной кодировки.
1
0 / 0 / 1
Регистрация: 31.01.2014
Сообщений: 50
07.06.2017, 07:03  [ТС] 3
OwenGlendower, кодировку заменил на Default, квадраты есть, но и стало меньше.
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,341
Записей в блоге: 1
07.06.2017, 11:28 4
Timur1994, чего меньше стало?
0
07.06.2017, 11:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2017, 11:28
Помогаю со студенческими работами здесь

Шифрование\дешифрование файла
Помогите пожалуйста сделать прогу, которая шифрует -дешифрует по следующему алгоритму: из файла...

Шифрование и дешифрование wav. файла
Можете помочь, с осуществлением шифрования сигнала, фильтрации частоты, а также дешифрации. Затем...

Шифрование/Дешифрование текстового файла
Здравствуйте! Подскажите пожалуйста, хочу сделать так: открываю свою программу, файл автоматически...

Открытие файла через диалоговое и последующее выполнение кода
Есть задача: нужно выбрать файл из списка, через диалоговое окно и по данным произвести...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru