Шифрование по алгоритму RSA - C#
Формулировка задачи:
Криптосистема шифрования данных RSA
Не получается дешифрование. Что не так?
Пара чисел (e,n) публикуется в качестве открытого ключа.
Пара чисел (d,n) является секретным ключом.
Все числа известны кроме n.
Шифрование сообщения с использованием открытого ключа:
Если m – сообщение (сообщениями являются целые числа в интервале от 0 до n-1), то зашифровать это сообщение можно как c=(m в степени е) mod(n).
Дешифрование сообщения с использованием секретного ключа:
Получатель расшифровывает, полученное сообщение с: m=(c в степени d) mod (n).
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace RSA
- {
- class Program
- {
- static void Main(string[] args)
- {
- int p = 13, q = 7, e = 5, d = 29;
- int n, c=0, m,r=0;
- string s;
- n = p * q;
- Console.Write("Сообщение: ");
- s = Console.ReadLine();
- m = Convert.ToInt32(s);
- Console.WriteLine("Открытый ключ: ({0},{1})", e,n);
- Console.WriteLine("Секретный ключ: ({0},{1})", d, n);
- if (m >= 0 && m < (n - 1))
- {
- c = (int)Math.Pow(m, e)%n;
- }
- Console.WriteLine("Шифрование: {0} ", c);
- r = (int)Math.Pow(c, d) % n;
- Console.WriteLine("Дешифрование: {0} ", r);
- Console.ReadLine();
- }
- }
- }
Решение задачи: «Шифрование по алгоритму RSA»
textual
Листинг программы
- static int ModPow(int x, int y, int z)
- => y == 0 ? 1 : (x * ModPow(x, y - 1, z)) % z;
- static void Main()
- {
- int p = 13, q = 7, e = 5, d = 29;
- int n, c = 0, m, r = 0;
- string s;
- n = p * q;
- Console.Write("Сообщение: ");
- s = Console.ReadLine();
- m = Convert.ToInt32(s);
- Console.WriteLine("Открытый ключ: ({0},{1})", e, n);
- Console.WriteLine("Секретный ключ: ({0},{1})", d, n);
- if (m >= 0 && m < (n - 1))
- {
- c = ModPow(m, e, n);
- Console.WriteLine("Шифрование: {0} ", c);
- r = ModPow(c, d, n);
- Console.WriteLine("Дешифрование: {0} ", r);
- }
- else Console.WriteLine("Слишком большое число");
- Console.ReadLine();
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д