Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 17.09.2013
Сообщений: 91

Расшифровка данных, NullReferenceException

17.02.2019, 10:31. Показов 1974. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, есть windows forms с полем ключ (textbox1), поле для ввода данных (textbox2) и кнопки зашифровать и расшифровать, а также сохранить и загрузить. Интересует такой момент: я загружаю текст из файла и он заполняет поле textbox2, я хочу добавить еще одну кнопку расшифровки, которая будет расшифровывать текст к исходному. Как это реализовать? Проблема в том, что я могу выполнить только функции зашифровать и потом расшифровать, а наоборот сделать не могу. Если вставить из файла зашифрованный текст и нажать кнопку расшифровать, вылетает ошибка: System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."

Text было null. Как правильно реализовать это, чтобы кнопка расшифровки ссылалась именно на то, что написано в поле с данными?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.02.2019, 10:31
Ответы с готовыми решениями:

Расшифровка данных
Кто нибудь может что посоветовать, как работает расшифровка файла данных какой либо игры? ну например чтобы редактировать какой нибудь...

Поиск данных в БД MySql и NullReferenceException
Здравствуйте! выполняю поиск в базе данных через текст бокс и кнопочку =) Вот само подключение и запрос =: MySqlConnection con = new...

NullReferenceException при редактировании данных
Добрый день. Данная программа работает с базой данных через wf. Пока что реализованы кнопки добавить и редактировать (они выделены...

8
18 / 13 / 10
Регистрация: 06.11.2016
Сообщений: 58
17.02.2019, 15:38
Сложно что-то конкретное сказать, когда не видишь код
0
0 / 0 / 0
Регистрация: 17.09.2013
Сообщений: 91
17.02.2019, 16:21  [ТС]
Функции шифрования и расшифровки
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
// Encrypt function
        Algorithm;
        public void code(uint[] v, uint[] k)
        {
            uint v0 = v[0];
            uint v1 = v[1];
            uint sum = 0;
            uint delta = 0x9e3779b9;
            uint n;
 
            for (n = 0; n < 32; n++) 
            {
                sum += delta;
                v0 += (v1 << 4) + k[0] ^ v1 + sum ^ (v1 >> 5) + k[1];
                v1 += (v0 << 4) + k[2] ^ v0 + sum ^ (v0 >> 5) + k[3];
            }
 
            v[0] = v0;
            v[1] = v1;
        }
 
        // Decrypt function
        public void decode(uint[] v, uint[] k)
        {
            uint n;
            uint sum = 0xC6EF3720;
            uint v0 = v[0];
            uint v1 = v[1];
            uint delta = 0x9e3779b9;
 
 
 
            for (n = 0; n < 32; n++)
            {
                v1 -= (v0 << 4) + k[2] ^ v0 + sum ^ (v0 >> 5) + k[3];
                v0 -= (v1 << 4) + k[0] ^ v1 + sum ^ (v1 >> 5) + k[1];
                sum -= delta;
            }
 
            v[0] = v0;
            v[1] = v1;
        }
Конвертация
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
// Convert to encrypt
        public string EncryptString(string Text, string Key)
    {
        if (Text.Length == 0)
            throw new ArgumentException("Данные должны содержать хотя бы 1 символ");
            uint[] Key1 = FormatKey(Key);
            
 
            if (Text.Length % 2 != 0) Text += '\0'; // Make sure array is even in length.       
        byte[] DataBytes = ASCIIEncoding.ASCII.GetBytes(Text); //Convert the string to an array of bytes.
            
            string cipher = string.Empty;
            uint[] Data = new uint[2];
           
            for (int i = 0; i < DataBytes.Length; i += 2)
        {
            Data[0] = DataBytes[i]; //Convert the two cipher values to strings and append to one long string.
            Data[1] = DataBytes[i + 1];
            code(Data, Key1);
            cipher += Sdvig.ConvertUIntToString(Data[0]) + Sdvig.ConvertUIntToString(Data[1]);
        }
 
        return cipher;
    }
        // Convert to decrypt
        public string DecryptString(string Text, string Key)
        
        {
         
            uint[] Key1 = FormatKey(Key);
 
        int x = 0;
        uint[] Data = new uint[2];
            byte[] DataBytes = new byte[Text.Length / 8 * 2];
           
            for (int i = 0; i < Text.Length; i += 8)
                {
                    Data[0] = Sdvig.ConvertStringToUInt(Text.Substring(i, 4));
                    Data[1] = Sdvig.ConvertStringToUInt(Text.Substring(i + 4, 4));
                    decode(Data, Key1);
                DataBytes[x++] = (byte)Data[0];
                    DataBytes[x++] = (byte)Data[1];
                }
          
 
        string decipheredString = ASCIIEncoding.ASCII.GetString(DataBytes, 0, DataBytes.Length);
        if (decipheredString[decipheredString.Length - 1] == '\0') // Strip the null char if it was added.
            decipheredString = decipheredString.Substring(0, decipheredString.Length - 1);
        return decipheredString;
    }
Ошибка в 34 строке
0
18 / 13 / 10
Регистрация: 06.11.2016
Сообщений: 58
17.02.2019, 16:34
Как происходит вызов функции DecryptString?
0
0 / 0 / 0
Регистрация: 17.09.2013
Сообщений: 91
17.02.2019, 16:51  [ТС]
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace TEA
{
    public class TEA
    {
        public TEA()
        {
        }
        // Encrypt function
        TEA Algorithm;
        public void code(uint[] v, uint[] k)
        {
            uint v0 = v[0];
            uint v1 = v[1];
            uint sum = 0;
            uint delta = 0x9e3779b9;
            uint n;
 
            for (n = 0; n < 32; n++) 
            {
                sum += delta;
                v0 += (v1 << 4) + k[0] ^ v1 + sum ^ (v1 >> 5) + k[1];
                v1 += (v0 << 4) + k[2] ^ v0 + sum ^ (v0 >> 5) + k[3];
            }
 
            v[0] = v0;
            v[1] = v1;
        }
 
        // Decrypt function
        public void decode(uint[] v, uint[] k)
        {
            uint n;
            uint sum = 0xC6EF3720;
            uint v0 = v[0];
            uint v1 = v[1];
            uint delta = 0x9e3779b9;
 
 
 
            for (n = 0; n < 32; n++)
            {
                v1 -= (v0 << 4) + k[2] ^ v0 + sum ^ (v0 >> 5) + k[3];
                v0 -= (v1 << 4) + k[0] ^ v1 + sum ^ (v1 >> 5) + k[1];
                sum -= delta;
            }
 
            v[0] = v0;
            v[1] = v1;
        }
        // Convert to encrypt
        public string EncryptString(string Text, string Key)
    {
        if (Text.Length == 0)
            throw new ArgumentException("Данные должны содержать хотя бы 1 символ");
            uint[] Key1 = FormatKey(Key);
            
 
            if (Text.Length % 2 != 0) Text += '\0'; // Make sure array is even in length.       
        byte[] DataBytes = ASCIIEncoding.ASCII.GetBytes(Text); //Convert the string to an array of bytes.
            
            string cipher = string.Empty;
            uint[] Data = new uint[2];
            for (int i = 0; i < DataBytes.Length; i += 2)
        {
            Data[0] = DataBytes[i]; //Convert the two cipher values to strings and append to one long string.
            Data[1] = DataBytes[i + 1];
            code(Data, Key1);
            cipher += Sdvig.ConvertUIntToString(Data[0]) + Sdvig.ConvertUIntToString(Data[1]);
        }
 
        return cipher;
    }
        // Convert to decrypt
        public string DecryptString(string Text, string Key)
        {
          
            uint[] Key1 = FormatKey(Key);
 
        int x = 0;
        uint[] Data = new uint[2];
            byte[] DataBytes = new byte[Text.Length / 8 * 2];
           
            for (int i = 0; i < Text.Length; i += 8)
                {
                    Data[0] = Sdvig.ConvertStringToUInt(Text.Substring(i, 4));
                    Data[1] = Sdvig.ConvertStringToUInt(Text.Substring(i + 4, 4));
                    decode(Data, Key1);
                DataBytes[x++] = (byte)Data[0];
                    DataBytes[x++] = (byte)Data[1];
                }
        
 
        string decipheredString = ASCIIEncoding.ASCII.GetString(DataBytes, 0, DataBytes.Length);
        if (decipheredString[decipheredString.Length - 1] == '\0') // Strip the null char if it was added.
            decipheredString = decipheredString.Substring(0, decipheredString.Length - 1);
        return decipheredString;
    }
 
    public uint[] FormatKey(string Key)
    {
        if (Key.Length == 0)
            throw new ArgumentException("Длина ключа должна содержать минимум 1 символ");
 
        Key = Key.PadRight(128, ' ').Substring(0, 16); // Ensure that the key is 16 chars in length, 1 symbol = 1 byte.
        uint[] Key2 = new uint[4];
 
        // Get the key into the correct format for TEA usage.
        int j = 0;
        for (int i = 0; i < Key.Length; i += 4)
            Key2[j++] = Sdvig.ConvertStringToUInt(Key.Substring(i, 4));
 
        return Key2;
    }
}
    
}
0
18 / 13 / 10
Регистрация: 06.11.2016
Сообщений: 58
17.02.2019, 16:58
Покажите функцию, которая привязана к нажатию на кнопку дешифровки
0
0 / 0 / 0
Регистрация: 17.09.2013
Сообщений: 91
17.02.2019, 17:24  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
private void button2_Click(object sender, EventArgs e)
        {
            TEA t = new TEA();
            //msEncrypt = new MemoryStream();
            textBox2.Text = t.DecryptString(cipher, textBox1.Text);
            //cipher = textBox2.Text;
            textBox2.ReadOnly = true;
            button2.Enabled = false;
            button1.Enabled = true;
            button2.Visible = false;
            button1.Visible = true;
            textBox2.Focus();
0
18 / 13 / 10
Регистрация: 06.11.2016
Сообщений: 58
17.02.2019, 17:53
Лучший ответ Сообщение было отмечено Rainbow59 как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
private void button2_Click(object sender, EventArgs e)
        {
            TEA t = new TEA();
            //msEncrypt = new MemoryStream();
            textBox2.Text = t.DecryptString(textBox2.Text, textBox1.Text);
            //cipher = textBox2.Text;
            textBox2.ReadOnly = true;
            button2.Enabled = false;
            button1.Enabled = true;
            button2.Visible = false;
            button1.Visible = true;
            textBox2.Focus();
Полагаю, что так будет работать нормально
1
0 / 0 / 0
Регистрация: 17.09.2013
Сообщений: 91
18.02.2019, 06:52  [ТС]
novagc, Спасибо большое, все заработало

Добавлено через 1 час 6 минут
novagc, Только возникла новая проблема
System.ArgumentOutOfRangeException: "Индекс и длина должны указывать на позицию в строке.
Имя параметра: length"
В 91 строке, что не так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.02.2019, 06:52
Помогаю со студенческими работами здесь

NullReferenceException при передаче данных из формы в базу и datatable
Доброго времени суток уважаемые форумчане! Не судите строго, первый раз задаю вопрос на подобном форуме. Суть вопроса: Пытаюсь...

Расшифровка данных
Добрый день! Есть задача по созданию файла dat (в формате iba файла). В данный файл архивируются данные переменных, допустим считанных из...

Расшифровка данных
На одном из сайтов ip и порт выглядит так 62.215.224.43:80 а в коде он выглядит так ........

Расшифровка данных
Есть некое устройство, которое шлёт данные (приведены в приложении). Как мне их расшифровать? hex.txt

Расшифровка данных
Есть файл следующего формата: 1. 8 байт initial value для Triple DES 2. Данные, зашифрованные при помощи Triple DES (EDE/DED) с...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
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 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru