Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/47: Рейтинг темы: голосов - 47, средняя оценка - 4.53
 Аватар для Duot
4 / 3 / 2
Регистрация: 01.02.2013
Сообщений: 27
.NET 4.x

Шифрование файлов RSA

02.09.2015, 15:26. Показов 8618. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дали задание зашифровать файлы при помоши RSA. Я нашел материалы как его используют со строками. Все с файлами работает аналогично. Но если длина превышает 87 байт - зашифровать не возможно.

Создание ключей шифрования
Кликните здесь для просмотра всего текста

C#
1
2
3
             RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
             rsaPrivateKey = RSA.ExportParameters(true);//экспорт закрытого ключа
             rsaOpenKey = RSA.ExportParameters(false);//экспорт открытого ключа



Тогда я беру файл и делю его на части - допустим по 64 байта. и все шифруется.каждый такой шифрованный кусок становиться размером 128 байт.
Я все эти куски беру и сохраняю в файл. Все вроде нормально.
шифрование файла
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            rsa.ImportParameters(rsaOpenKey);
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Multiselect = false;
            if (ofd.ShowDialog() != System.Windows.Forms.DialogResult.OK) return;
 
            byte[] text = File.ReadAllBytes(ofd.FileName);
            
            int part = text.Length/64;
            List<byte> massArray = new List<byte>();
 
            for (int i = 0; i <= part; i++)
            {
                byte[] temp = ReturnSubByte(text, i * 64, 64);
 
 
                massArray.AddRange(rsa.Encrypt(temp, true));
            }
 
 
            File.WriteAllBytes(@"h:\encrypt.txt", massArray.ToArray());



Затем я дешифрую этот файл:
также делю файл на части по на 128 байт.
и каждую пытаюсь дешифровать методом Decrypt - но как только я пытаюсь это сделать получаю ошибку
Ошибка при декодировании заполнения OAEP
А здесь дешифрую
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            rsa.ImportParameters(rsaPrivateKey);
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Multiselect = false;
            if (ofd.ShowDialog() != System.Windows.Forms.DialogResult.OK) return;
 
            byte[] text = File.ReadAllBytes(ofd.FileName);
           
            int part = text.Length / 128;
            List<byte> massArray = new List<byte>();
 
            for (int i = 0; i <= part; i++)
            {
                byte[] temp = ReturnSubByte(text, i * 128, 128);
 
 
                massArray.AddRange(rsa.Decrypt(temp, true));// Ошибка при декодировании заполнения OAEP.
            }
 
            File.WriteAllBytes(@"h:\decrypt.txt",massArray.ToArray());


Я проверял в Decrypt - приходят именно те байты какие должны.
Не знаю что дальше, то и делать.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.09.2015, 15:26
Ответы с готовыми решениями:

Как поменять результат шифрование \ Метод шифрование RSA
Здравствуйте! Прошу помощи! В просторах интернета нашла одну статью в которой реализован метод шифрования RSA. Решила его опробовать, но...

RSA шифрование
Доброго времени суток, у меня возникла такая проблема, преподаватель дал задание: &quot;написать свою реализацию алгоритма RSA...

RSA шифрование
Всем привет, вопрос такой. Будет 2 приложения. 1 шифрует 2 расшифровывает. Я создал пару ключей, экспортировал как xml. Как мне...

5
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18283 / 14206 / 5368
Регистрация: 17.03.2014
Сообщений: 28,884
Записей в блоге: 1
03.09.2015, 02:30
Duot, у меня файлы длиной несколько Мб шифруются и дешифруются без ошибок. Я только твой код переделал немного:
Кликните здесь для просмотра всего текста
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
void EncryptFile(string inputFile, string outputFile)
{
    using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
    {
        rsa.ImportParameters(rsaOpenKey);
    
        using (var fstreamIn = new FileStream(inputFile, FileMode.Open, FileAccess.Read))
        using (var fstreamOut = new FileStream(outputFile, FileMode.Create, FileAccess.Write))
        {
            byte[] buf = new byte[64];
            for(;;)
            {
                int bytesRead = fstreamIn.Read(buf, 0, buf.Length);
                if (bytesRead == 0) break;
                byte[] encrypted = bytesRead == buf.Length ? rsa.Encrypt(buf, true) : rsa.Encrypt(buf.Take(bytesRead).ToArray(), true);
                fstreamOut.Write(encrypted, 0, encrypted.Length);
            }
        }
    }
}
 
void DecryptFile(string inputFile, string outputFile)
{
    using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
    {
        rsa.ImportParameters(rsaPrivateKey);
        
        using (var fstreamIn = new FileStream(inputFile, FileMode.Open, FileAccess.Read))
        using (var fstreamOut = new FileStream(outputFile, FileMode.Create, FileAccess.Write))
        {
            byte[] buf = new byte[128];
            for(;;)
            {
                int bytesRead = fstreamIn.Read(buf, 0, buf.Length);
                if (bytesRead == 0) break;
                byte[] decrypted = rsa.Decrypt(buf, true);
                fstreamOut.Write(decrypted, 0, decrypted.Length);
            }
        }
    }
}
1
 Аватар для Duot
4 / 3 / 2
Регистрация: 01.02.2013
Сообщений: 27
03.09.2015, 10:38  [ТС]
Спасибо тебе! Код рабочий.
Магия в том, что я и твой метод использовал - полная ерунда выходила. Разница в этом месте была
Code
1
rsa.Encrypt(buf.Take(bytesRead).ToArray(), true);
- я так понимаю, мы последние байты берем сколько есть и их шифруем?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18283 / 14206 / 5368
Регистрация: 17.03.2014
Сообщений: 28,884
Записей в блоге: 1
03.09.2015, 10:42
Цитата Сообщение от Duot Посмотреть сообщение
я так понимаю, мы последние байты берем сколько есть и их шифруем?
Да. Ведь размер файла не обязан быть кратным 64 байтам.
0
 Аватар для Duot
4 / 3 / 2
Регистрация: 01.02.2013
Сообщений: 27
03.09.2015, 10:52  [ТС]
Здесь я и нарушал структуру шифра, ведь этого не учитывал.
0
11 / 11 / 8
Регистрация: 18.09.2012
Сообщений: 514
15.01.2020, 23:19
Цитата Сообщение от OwenGlendower Посмотреть сообщение
byte[] decrypted = rsa.Decrypt(buf, true);
Использовал каш код, пишет ошибку: System.Security.Cryptography.Cryptograph icException: "Ошибка при декодировании заполнения OAEP."

Добавлено через 1 минуту
Открываю и сохраняю файлы так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 private void Button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.ShowDialog();
            SaveFileDialog ofs = new SaveFileDialog();
            ofs.ShowDialog();
            EncryptFile(ofd.FileName,ofs.FileName+".txt");
        }
 
        private void Button2_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.ShowDialog();
            SaveFileDialog ofs = new SaveFileDialog();
            ofs.ShowDialog();
            DecryptFile(ofd.FileName, ofs.FileName + ".txt");
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.01.2020, 23:19
Помогаю со студенческими работами здесь

Rsa шифрование
Доброго времени суток, пытаюсь разобраться с шифрованием, пару ключей генерирует, открытым ключом шифрует, закрытым расшифровывает. пытаюсь...

Шифрование по алгоритму RSA
Криптосистема шифрования данных RSA Не получается дешифрование. Что не так? Пара чисел (e,n) публикуется в качестве открытого...

RSA шифрование файла
Всем привет, пишу программу, которая будет шифровать файл, дабы безопасно передавать его. Вычитал, что есть надежный метод шифрования -...

Шифрование строки методом RSA
Здравствуйте, возникла такая задача. Есть текст. Нужно его зашифровать, используя метод асимметричного шифрования RSA. Так же...

RSA шифрование с контейнером и сертификатом
Здравствуйте, есть программа для rsa шифрования, требуется с использованием самоподписного сертификата использовать один и тот же приватный...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru