142 ^ 23% 187 по модулю RSA должно быть 65, но есть 53, есть идеи почему? - PullRequest
0 голосов
/ 15 ноября 2018

Как и в заголовке, 142 ^ 23% 187 должно быть 65, а не 53. Он является частью алгоритма шифрования / дешифрования RSA.

Предыдущая операция по модулю правильная, а вторая - нет.

Если вы введете 142 ^ 23% 187 в альфа-вольфраме правильно, 65 - и 65 действительно будет A после расшифровки.

Есть идеи? Код ниже:

using System;
using System.Collections.Generic;

namespace RSA
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");



            AlgoritmRSA RSA = new AlgoritmRSA(11, 17, 7);
            RSA.Encrypting("A");
            RSA.Decrypting();



        }
    }
}

namespace RSA
{
    public class AlgoritmRSA
    {

        public AlgoritmRSA(int p, int q, int e) 
        {
            this.P = p;
            this.Q = q;
            this.E = e;

        }
        public int P { get; private set; }
        public int Q { get; private set; }
        public int E { get; private set; }

        List<int> J = new List<int>();
        List<double> C = new List<double>();
        List<double> NJ = new List<double>();
        List<char> ASCIIList = new List<char>();

        public void Encrypting(string message)
        {
            int n = P * Q;
            System.Console.WriteLine("N = {0}",n);

            foreach (var item in message)
            {
                J.Add(Convert.ToInt32(item));
            }

            System.Console.WriteLine("E = {0}", E);

            foreach (var item in J)
            {
                System.Console.WriteLine("J = {0}", item);
                C.Add(Math.Pow(item, E) % n);
                System.Console.WriteLine("C = {0}", C[0]);
            }

        }


        public void Decrypting()
        {
            double CC = Math.Pow(142, 23);
            double BB = CC % 187;
            System.Console.WriteLine(CC);


            int n  = P * Q;

            int K = ((P-1)*(Q-1)+1)/E;
            System.Console.WriteLine("K = {0}", K);


            foreach (var enc in C)
            {
                NJ.Add(Math.Pow(enc, K) % n);
                System.Console.WriteLine("NJ = {0}", NJ[0]);
            }

            foreach (var item in NJ)
            {
                ASCIIList.Add(Convert.ToChar(item));

            }

            System.Console.WriteLine("Encrypted Message: \n");

            foreach (var item in ASCIIList)
            {
                System.Console.WriteLine("{0}", item);
            }


        }

    }
}

1 Ответ

0 голосов
/ 15 ноября 2018

Здесь вы находитесь в PowerShell, работает до 65, как и предполагалось.

[bigint]::Pow(142, 23) % 187

... беспокоит то, что нормальная математическая функция не сообщает об ошибке, а просто сообщает неверную информацию.

...