Example #1
0
        }                                                    // Обратный к общему многочлен

        /// <summary>
        /// Функция, выполняющая дешифрование сообщения
        /// </summary>
        /// <returns>Возвращает исходную строку</returns>
        public Polynomial Decipher()
        {
            int        order           = Data.FieldOfCryptosystem.Order;
            Polynomial mod             = Data.FieldOfCryptosystem.Modulus;
            Polynomial commonKey       = Data.Power(Mask, privatePower, order, mod); // возведение в степень маски
            Polynomial inversedElement = Polynomial.InversedElement(commonKey);      // Используем обратный элемент в общему

            // Обратный многочлен необходимо сделать таким, что НОД с общим = 1, т.к. из взаимной простоты многочленов следует, что НОД=с=const
            Polynomial gcd = Data.PolynomialGCD(commonKey, mod, order)[0];

            inversedElement = Data.Divide(inversedElement, gcd, order);
            InversedPower   = inversedElement;
            Polynomial decipheredPart         = Data.Multiply(inversedElement, EncryptedMessage, order); // Получаем дешифрованный вид
            Polynomial deciphredCanonicalPart = Data.Modulus(decipheredPart, mod, order);                // Приводим к нормальному виду

            Data.Abduction(ref deciphredCanonicalPart, order);
            return(deciphredCanonicalPart);
        }