Изменить тип шифрования - C#

Узнай цену своей работы

Формулировка задачи:

такая проблема. есть программа (покер) с Rsa шифрованием. Пытаюсь переделать под шифрование Шамира, но никак не выходит( Кто подскажет как правильно реализовать? Вот исходный вариант
        public void RSA(int[] message, out int[] array)
        {
            int[] m2  = message;
            array = new int[3];
            int p = 3, q = 11;
            int n = p*q;
            int e = 7;
            for (int i = 0; i < 3; i++)
            {
                int m = message[i];
                double x1 = Math.Pow(m, e)%n;
                array[i] = (int)x1;
            }
        }

Решение задачи: «Изменить тип шифрования»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Numerics;
using System.IO;
using System.Windows.Forms;
using Poker;
 
 
namespace Crypt
{
 
    class Operation
    {
        int N, Fi, e;
        int shifr_message, new_message;
        int x, y, gcd;
 
        public void evklid(int first, int second, out int x, out int y, out int res)
        {
            int a, b, gcd;
            a = first;
            b = second;
            if (b == 0)
            {
                x = 1;
                y = 0;
                gcd = a;
                res = gcd;
                return;
            }
            else
            {
                int x2 = 1;
                int x1 = 0;
                int y2 = 0;
                int y1 = 1;
 
                while (b > 0)
                {
                    int q = a/b;
                    int r = a - q*b;
                    x = x2 - q*x1;
                    y = y2 - q*y1;
                    a = b;
                    b = r;
                    x2 = x1;
                    x1 = x;
                    y2 = y1;
                    y1 = y;
                }
                gcd = a;
                x = x2;
                y = y2;
                res = gcd;
                return;
            }
        }
 
        /// <summary>
        /// Shamir
        /// </summary>
        /// <param name="message"></param>
        /// <param name="ca"></param>
        /// <param name="cb"></param>
        /// <param name="array"></param>
        public void Shamir(int[] message, out int[] array)
        {
            int[] m2 = message;
            array = new int[3];
            int p = 3, q = 11;
            int n;
            int e = 7;
            string rez = "";
            for (int i = 0; i < 3; i++)
            {
                BigInteger m = message[i];
                BigInteger x1 = BigInteger.ModPow(m, q, p);
                BigInteger x2 = BigInteger.ModPow(x1, e, p);
                string shifrtroika = x2.ToString();
                //while (shifrtroika.Length < 3) 
                if (shifrtroika.Length < 3)
                {
                    for (int kz = shifrtroika.Length; kz < 3; kz++)
                    {
                        if (shifrtroika.Length <= 3)
                        {
                            shifrtroika = "0" + shifrtroika;
                        }
                    }
                }
                rez += shifrtroika;
 
            }
        }
 
        public void Shamir2(int[] message, out int[] array)
        {
            int[] m2 = message;
            array = new int[3];
            int p = 3, q = 11;
            int n;
            int e = 7;
            string rez = "";
            for (int i = 0; i < 3; i++)
            {
                BigInteger m = message[i];
                BigInteger x1 = BigInteger.ModPow(m, q, p);
                BigInteger x2 = BigInteger.ModPow(x1, e, p);
                string shifrtroika = x2.ToString();
                //while (shifrtroika.Length < 3) 
                if (shifrtroika.Length < 3)
                {
                    for (int kz = shifrtroika.Length; kz < 3; kz++)
                    {
                        if (shifrtroika.Length <= 3)
                        {
                            shifrtroika = "0" + shifrtroika;
                        }
                    }
                }
                rez += shifrtroika;
 
            }
        }
        public void Shamir_r(int[] message, out int[] rez2)
        {
            int[] array = new int[3];
            string str = "";
            int p = 3, t = 11;
            int n;
            int d = 3;
            for (int i = 0; i < 3; i++)
            {
                BigInteger m = message[i];
                BigInteger x3 = BigInteger.ModPow(m, t, p);
                BigInteger x4 = BigInteger.ModPow(x3, d, p);
                string shifrtroika = x4.ToString();
                //while (shifrtroika.Length < 3) 
                if (shifrtroika.Length < 3)
                {
                    for (int kz = shifrtroika.Length; kz < 3; kz++)
                    {
                        if (shifrtroika.Length <= 3)
                        {
                            shifrtroika = "0" + shifrtroika;
                        }
                    }
                }
 
            }
            rez2 = array;
        }
        public void Shamir_r2(int[] message, out int rez2)
        {
            int[] array = new int[3];
            string str = "";
            int p = 3, t = 11;
            int n;
            int d = 3;
            for (int i = 0; i < 3; i++)
            {
                BigInteger m = message[i];
                BigInteger x3 = BigInteger.ModPow(m, t, p);
                BigInteger x4 = BigInteger.ModPow(x3, d, p);
                string shifrtroika = x4.ToString();
                //while (shifrtroika.Length < 3) 
                if (shifrtroika.Length < 3)
                {
                    for (int kz = shifrtroika.Length; kz < 3; kz++)
                    {
                        if (shifrtroika.Length <= 3)
                        {
                            shifrtroika = "0" + shifrtroika;
                        }
                    }
                }
 
            }
            for (int i = 0; i < 3; i++)
            {
                int m = array[i];
                str = str + m.ToString();
            }
            rez2 = Convert.ToInt32(str);
        }
 
        public void card_en(int k, out Card c)
        {
            int kl = k/100;
            if (kl == 1)
            {
                int m = k - 100;
                c = new Card(uz(m), Suits.Hearts);
            }
            else { if (kl == 2)
                {
                    int m = k - 200;
                    c = new Card(uz(m), Suits.Diamonds);
                }
                else { if (kl == 3)
                    {
                        int m = k - 300;
                        c = new Card(uz(m), Suits.Clubs);
                    }
                    else { if (kl == 4)
                    { 
                        int m = k - 400;
                        c = new Card(uz(m), Suits.Spades);
                        }
                    else
                    {
                            c = new Card(Ranks.A, Suits.Spades);
                        //MessageBox.Show("Error");
                        //Form.ActiveForm.Close();
                    }
                    }}}}
 
        Ranks uz(int m)
        {
            if (m == 14) return Ranks.A;
            else { if (m == 13) return Ranks.K;
            else { if (m == 12) return Ranks.Q;
            else { if (m == 11) return Ranks.J;
            else { if (m == 10) return Ranks.Ten;
            else { if (m == 9) return Ranks.Nine;
            else { if (m == 8) return Ranks.Eight;
            else { if (m == 7) return Ranks.Seven;
            else { if (m == 6) return Ranks.Six;
            else { if (m == 5) return Ranks.Five;
            else { if (m == 4) return Ranks.Four;
            else { if (m == 3) return Ranks.Tree;
            else return Ranks.A;}}}}}}}}}}}
        }
    }
    
}

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

14   голосов , оценка 3.929 из 5
Похожие ответы