RSA. Применить полученные ключи к считанному массиву байтов - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, тем на данному вопросу много,но так и не разобрался. Суть:реализация шифрования/дешифрования файла любого типа(jpeg,txt,exe). Генерация пар:открытый/закрытый ключ(E,N)&(D,N), выполнена.(24 битные ключи). Вопрос:не до конца понимаю как правильно "применить" полученные ключи к считанному массиву байтов( блоки по 3 байта).
//генерация ключей,если нужна.
 int P = 0, Q = 0, N = 0, F, D, E;
        public string path_to_encrypt_file;
        private void button1_Click(object sender, EventArgs e) // генерация ключей пользователя А
        {
            
            Random rnd = new Random();
            do
            {
                P = rnd.Next(128, 255); // генерация 8 битного числа
            } while (IsPrime(P));
            do
            {
                Q = rnd.Next(32768, 65535); // генерация 16 битного числа
            } while (IsPrime(P));
            textBox1.Text = Convert.ToString(P) + " " + Convert.ToString(Q);
            N = P * Q; 
            F = (P - 1)*(Q - 1);
            do
            {
                D = rnd.Next(2, F - 1);
            } while (IsPrime(D)); // если D простое,оно взаимнопростое с F
            E = GenerationOfD(D, F); // генерация Е по формуле e*d mod F=1

        }
        public static bool IsPrime(int A) //Проверка на простоту
        {
            for(int i=2;i<Math.Sqrt(A)+1;i++)
                if ((A % i) == 0) return true;
            return false;
 
        }
        public static int GenerationOfD(int D, int F)
        {
            int E = 0; int Res = 0;
            for(E=1;;E++)
            {
                Res = (E *D) % F;
                if (Res == 1) break;
            }
            return E;
        }
        public static int ModPow(int a, int b, int c) // А число возводимое в степень, Б степень, С остаток от деления. // Метод ModPow ручками
        {
            int d = a % c, e = a % c;
            for (int i = 0; i < b - 1; i++)
            {
                d = d * e % c;
            }
            return d;
        }

Решение задачи: «RSA. Применить полученные ключи к считанному массиву байтов»

textual
Листинг программы
 private void button3_Click(object sender, EventArgs e)
        {
            FileStream fl = new FileStream(path_to_encrypt_file,FileMode.Open,FileAccess.Read);
            int len = (int)fl.Length;
            string path2 = path_to_encrypt_file;
            byte[] buf = new byte[len];
            byte[] bufen = new byte[len];
            int step = 0;
            int encord = 0;
            while (len > 0)
            {
                if (step >= len) break;
                int n = fl.Read(buf, step, 3); 
                if (n == 0)
                    break;
                
                step += n;
                len -= n;
                step -= 3;
                encord = BitConverter.ToInt32(buf, step);
                encord = ModPow(encord, D, N);
                bufen[step] = Convert.ToByte(encord);
                step += 3;
            }
 
            path2 += "encoded";
            File.WriteAllBytes(path2, bufen);
            fl.Close();
 
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5
Похожие ответы