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

Проблема с RSA шифрованием текстовых файлов большого размера

05.04.2016, 22:42. Показов 882. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Проблема связана с RSA шифрованием, а именно в шифровании текстовых файлов большого размера. Ведь сообщение не должно превышать размер модуля, хотел бы узнать как можно решить данную проблему.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.04.2016, 22:42
Ответы с готовыми решениями:

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

Загрузка файлов большого размера с HTTPS
Здравствуйте, я написал программу для загрузки файлов БОЛЬШОГО размера с HTTPS при помощи Synapse, но Synapse отправляет файл начало в...

Закачивание на сервер файлов большого размера
Возникла проблема при закачивании файлов большого размера. Необходима передавать файл через php-скрипт размером до 10Gb. Но максимально...

3
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
05.04.2016, 22:46
Цитата Сообщение от Bastilla Посмотреть сообщение
хотел бы узнать как можно решить данную проблему.
Разбить файл на соответствующие по длине куски?
0
0 / 0 / 1
Регистрация: 30.09.2015
Сообщений: 22
05.04.2016, 22:52  [ТС]
Ну а расшифровывать тогда как, ведь в зашифрованном файле получится больше байт.
P.S. использовал класс "RSACryptoServiceProvider"
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
06.04.2016, 08:41
RSA предназначен для шифрования небольших объемов данных.

Может быть вам подойдет такой вариант. Тут данные шифруются с помощью симметиричных алгоритмов Rijndael/DES/TripleDES/AES/RC2, а ключи для этих алгоритмов шифруются с помощью 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
using System.IO;
using System.Security.Cryptography;
 
namespace RSAEncryption
{
    class Program
    {
        const string keyFilePub = "keyPub.txt";
        const string keyFilePriv = "keyPriv.txt";
 
        static void Main(string[] args)
        {
            ExportKeyFile();
 
            //EncryptFile<RijndaelManaged>("encryptme.txt", "encrypted.txt");
            //DecryptFile<RijndaelManaged>("encrypted.txt", "decrypted.txt");
 
            EncryptFile<TripleDESCryptoServiceProvider>("encryptme.txt", "encrypted.txt");
            DecryptFile<TripleDESCryptoServiceProvider>("encrypted.txt", "decrypted.txt");
 
            //EncryptFile<AesManaged>("encryptme.txt", "encrypted.txt");
            //DecryptFile<AesManaged>("encrypted.txt", "decrypted.txt");
 
            //EncryptFile<DESCryptoServiceProvider>("encryptme.txt", "encrypted.txt");
            //DecryptFile<DESCryptoServiceProvider>("encrypted.txt", "decrypted.txt");
 
            //EncryptFile<RC2CryptoServiceProvider>("encryptme.txt", "encrypted.txt");
            //DecryptFile<RC2CryptoServiceProvider>("encrypted.txt", "decrypted.txt");
        }
 
        static void ExportKeyFile()
        {
            using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
            {
                if (!File.Exists(keyFilePriv))
                    File.AppendAllText(keyFilePriv, RSA.ToXmlString(true));
                if (!File.Exists(keyFilePub))
                    File.AppendAllText(keyFilePub, RSA.ToXmlString(false));
            }
        }
 
        static void EncryptFile<T>(string filein, string fileout) where T : SymmetricAlgorithm, new()
        {
            using (FileStream fsin = new FileStream(filein, FileMode.Open))
            using (FileStream fsout = new FileStream(fileout, FileMode.Create))
            using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
            {
                RSA.FromXmlString(File.ReadAllText(keyFilePub));
 
                // Create a new instance of the SymmetricAlgorithm class.
                using (T symAlg = new T())
                {
                    // Encrypt the symmetric key and IV.
                    byte[] EncryptedSymmetricKey = RSA.Encrypt(symAlg.Key, false);
                    byte[] EncryptedSymmetricIV = RSA.Encrypt(symAlg.IV, false);
 
                    // 128 byte key
                    fsout.Write(EncryptedSymmetricKey, 0, EncryptedSymmetricKey.Length);
                    // 128 byte IV
                    fsout.Write(EncryptedSymmetricIV, 0, EncryptedSymmetricIV.Length);
 
                    using (var encryptor = symAlg.CreateEncryptor())
                    using (var cstream = new CryptoStream(fsout, encryptor, CryptoStreamMode.Write))
                        fsin.CopyTo(cstream);
                }
            }
        }
 
        static void DecryptFile<T>(string filein, string fileout) where T: SymmetricAlgorithm, new()
        {
            using (FileStream fsin = new FileStream(filein, FileMode.Open))
            using (FileStream fsout = new FileStream(fileout, FileMode.Create))
            using (BinaryReader br = new BinaryReader(fsin))
            using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
            {
                RSA.FromXmlString(File.ReadAllText(keyFilePriv));
 
                // Create a new instance of the SymmetricAlgorithm class.
                using (T symAlg = new T())
                {
                    // Decrypt the symmetric key and IV.
                    symAlg.Key = RSA.Decrypt(br.ReadBytes(128), false);
                    symAlg.IV = RSA.Decrypt(br.ReadBytes(128), false);
 
                    using (var decryptor = symAlg.CreateDecryptor())
                    using (var cstream = new CryptoStream(fsin, decryptor, CryptoStreamMode.Read))
                        cstream.CopyTo(fsout);
                }
            }
        }
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.04.2016, 08:41
Помогаю со студенческими работами здесь

Генератор текстовых файлов заданного размера
Здравствуйте. Мне необходимо сгенерировать текстовый файл заданного размера в байтах на C#. Создаю файл, записываю в него слова, а как...

Подскажите как быть с шифрованием RSA
Уважаемые пользователи форума, помогите с кодом на delphi для шифрования по алгоритму RSA. Отыскал примеры в инете, но половина не рабочих....

Файл или массив большого размера вывести на экран через буфер маленького размера
Приветствую! Суть: нужно продеть слона int slon длиной 13467 через игольное ушко byte uho = new byte, чтобы часть слона, прошедшая через...

Проблема с AES шифрованием.
Есть программа(бета версия), которая шифрует/дешифрует текст методом AES. Но при дешифровании, выскакивает ошибка, согласно которой буфер...

Восстановление файлов с шифрованием EFS
Привет. Друг попросил установить Windows 7 вместо Windows XP. Всё нормально установилось. Потом гуляю по его жесткому диску D и вижу...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в КА2. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа в КА2. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru