Шифрование по алгоритму 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(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д