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

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


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

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

9   голосов , оценка 4.111 из 5