Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
8 / 8 / 3
Регистрация: 03.12.2017
Сообщений: 61
1

Исключение System.Security.Cryptography.CryptographicException

09.12.2018, 21:58. Просмотров 646. Ответов 0
Метки нет (Все метки)

Здравствуйте, пишу программу шифрования алгоритмом RSA. Шифрование проходит без проблем, а вот при дешифровке появляется исключение System.Security.Cryptography.CryptographicException с описанием BadData в строке 96, никак не пойму в чем проблема.

Ввод и вывод осуществляется через RichTextBox.

кнопка Зашифровать :

C#
1
2
3
4
5
6
7
8
9
10
11
private void button1_Click(object sender, EventArgs e)
        {
            if (richTextBox1.Text.Length > 0)
            {
                
                rsa.GenerateKeys();
                privateKey = rsa.GetPrivateKey.ToString();
                string EncryptText = rsa.Encrypt(richTextBox1);
                richTextBox1.Text = EncryptText;
                textBox1.Text = privateKey;
            }
кнопка Расшифровать :

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private void button2_Click(object sender, EventArgs e)
        {
            if (richTextBox1.Text.Length == 0)
            {
                MessageBox.Show("Дешифровка невозможна : поле текста пустое.", "Ошибка!", MessageBoxButtons.OK);
            }
 
            if (textBox1.Text.Length == 0)
            {
                MessageBox.Show("Введите приватный ключ", "Ошибка!", MessageBoxButtons.OK);
            }
            if(textBox1.Text != privateKey)
            {
                MessageBox.Show("Некоректный ключ", "Ошибка!", MessageBoxButtons.OK);
            }
            else
            {
                string key = textBox1.Text; 
                string DecryptedText = rsa.Decrypt(richTextBox1, key);
                richTextBox1.Text = DecryptedText;
            }
        }

Класс RSA :

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security.Cryptography;
using System.Windows.Forms;
 
namespace RSAClass
{
    
    class RSA
    {
        private const int sizeOfBlock = 128; 
        private const int sizeOfChar = 16;
        private string privateKey;
        private string publicKey;
        string[] blocks;
        byte[] EncryptedData;
        byte[] DecryptedData;
 
        public RSA(){}
 
        public string GetPrivateKey
        {
            get { return privateKey; }
        }
 
        public string GetPublicKey
        {
            get { return publicKey; }
        }
 
        public void GenerateKeys()
        {
            RSACryptoServiceProvider RsaKey = new RSACryptoServiceProvider();
            privateKey = RsaKey.ToXmlString(true);
            publicKey = RsaKey.ToXmlString(false);
            
        }
 
        private string StringToRightLength(string input)
        {
            while (((input.Length * sizeOfChar) % sizeOfBlock) != 0)
                input += "#";
 
            return input;
        }
 
        private void CutStringIntoBlocks(string input)
        {
            blocks = new string[(input.Length * sizeOfChar) / sizeOfBlock];
 
            int lengthOfBlock = input.Length / blocks.Length;
 
            for (int i = 0; i < blocks.Length; i++)
            {
                blocks[i] = input.Substring(i * lengthOfBlock, lengthOfBlock);                
            }
        }
 
 
        public string Encrypt(RichTextBox data)
        {
            string outputText = "";
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            rsa.FromXmlString(publicKey);
            byte[] dataByteArray;
            string rightText = StringToRightLength(data.Text);
            CutStringIntoBlocks(rightText);
 
            for (int i = 0; i < blocks.Length; i++)
            {
                
                dataByteArray = Encoding.Unicode.GetBytes(blocks[i]);
                EncryptedData = rsa.Encrypt(dataByteArray, false);
                string encUnicodeString = Encoding.Unicode.GetString(EncryptedData);                
                outputText = encUnicodeString;
                
            }            
            return outputText;
        }
 
        public string Decrypt(RichTextBox data, string privateKey)
        {
            string outputText = "";
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            rsa.FromXmlString(privateKey);
            byte[] dataByteArray;
            string rightText = StringToRightLength(data.Text);
            CutStringIntoBlocks(data.Text);
 
            for (int i = 0; i < blocks.Length; i++)
            {                
                dataByteArray = Encoding.Unicode.GetBytes(blocks[i]);                
                DecryptedData = rsa.Decrypt(dataByteArray, false); // тут исключение BadData
                string encUnicodeString = Encoding.Unicode.GetString(DecryptedData);                
                outputText += encUnicodeString;               
            }            
            return outputText;
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2018, 21:58
Ответы с готовыми решениями:

Шифрование System.Security.Cryptography
Добрый вечер. Стоит следующая задача: шифрование пароля, хранение в файле, и считывание с...

В проекте не видны некоторые классы из System.Security.Cryptography
Здравствуйте. У меня есть курсовой проект по шифрованию в C#. Я пошарил в интернеты классы...

RSA - реализация без использования System.Security.Cryptography
Задача следующая: Реализовать алгоритм RSA. Я впринципе сделал, но шифрование происходит...

Необработанное исключение типа "System.Net.Sockets.SocketException" в System.dll
Доброго времени суток! Есть следующая статья: Разработка прокси-сервера на C# В самом конце есть...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2018, 21:58

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как присвоить типу System.Security.SecureString тип string?
Как передать строку типа string в параметр типа System.Security.SecureString?

Исключение System.AccessViolationException
Здравствуйте! Пишу С# приложение под Windows 7 — всё работает стабильно и правильно. Запускаю...

Исключение System.InvalidOperationException
выбрасывает когда пытаюсь по таймеру добавлять текст в текст бокс public partial class...

.net 4.0 необратимое исключение: System.IO.FileNotFoundException
Всем доброго дня. Столкнулся вот с такой вот проблемой - есть макрос для tekla structures, который...


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

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

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