Шифрование по алгоритму 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();
}