Пример #1
0
        public void GenerateKey(int max, int min)
        {
            PrimeNumber primeNumber = new PrimeNumber();

            _privateKeyA = primeNumber.returnPrime(min, max);
            _privateKeyB = primeNumber.returnPrime(min, max);
            _publicKey   = RSAEncryptor.GeneratePublicKey(_privateKeyA, _privateKeyB);
            int x = RSAEncryptor.LeastCommonMultiple(_privateKeyA, _privateKeyB);

            _coPrimeNumber      = RSAEncryptor.GenerateCoPrime(_privateKeyA, _privateKeyB, x);
            _computedPrivateKey = RSAEncryptor.GeneratePrivateKey(_coPrimeNumber, x);
        }
Пример #2
0
        public void Break(int publicKeyClient, int clientPrime, int publicKeyServer, int serverPrime)
        {
            int lcm;

            for (int i = 2; i < publicKeyClient; i++)
            {
                if (_primes[i] == 0)
                {
                    for (int k = 2; k < publicKeyClient; k++)
                    {
                        if (_primes[k] == 0)
                        {
                            if (i * k > publicKeyClient)
                            {
                                k = publicKeyClient;
                            }
                            if (i * k == publicKeyClient)
                            {
                                lcm = RSAEncryptor.LeastCommonMultiple(i, k);
                                _privateKeyClient = RSAEncryptor.GeneratePrivateKey(clientPrime, lcm);
                                i = publicKeyClient;
                            }
                        }
                    }
                }
            }

            for (int i = 2; i < publicKeyServer; i++)
            {
                if (_primes[i] == 0)
                {
                    for (int k = 2; k < publicKeyServer; k++)
                    {
                        if (_primes[k] == 0)
                        {
                            if (i * k > publicKeyServer)
                            {
                                k = publicKeyServer;
                            }
                            if (i * k == publicKeyServer)
                            {
                                lcm = RSAEncryptor.LeastCommonMultiple(i, k);
                                _privateKeyServer = RSAEncryptor.GeneratePrivateKey(serverPrime, lcm);
                                i = publicKeyServer;
                            }
                        }
                    }
                }
            }
        }
Пример #3
0
        private void EavesdropperGoButton_Click(object sender, EventArgs e)
        {
            if (_messageSent)
            {
                Eavesdropper eavesdropper = new Eavesdropper();
                eavesdropper.Break(simulation.client.PublicKey, simulation.client.CoPrime, simulation.server.PublicKey, simulation.server.CoPrime);

                EavesdropperClientPublicKeyTextBox.Text  = simulation.client.PublicKey.ToString();
                EavesdropperServerPublicKeyTextBox.Text  = simulation.server.PublicKey.ToString();
                EavesdropperClientPrivateKeyTextBox.Text = eavesdropper.PrivateKeyClient.ToString();
                EavesdropperServerPrivateKeyTextBox.Text = eavesdropper.PrivateKeyServer.ToString();

                string message = RSAEncryptor.Decrypt(simulation.server.EncryptedData, simulation.server.PublicKey, eavesdropper.PrivateKeyServer, simulation.server.EncryptedData.Length);
                EavesdropperMessageTextBox.Text = message;
            }
        }
Пример #4
0
        private void StartClient(string ipAddress, int port, string message)
        {
            TcpClient tcpclient = new TcpClient();
            IPAddress ip;

            if (!IPAddress.TryParse(ipAddress, out ip))
            {
                ip = IPAddress.Loopback;
            }

            tcpclient.Connect(ip, port);

            Stream stm = tcpclient.GetStream();


            string temp = "";

            byte[] b = new byte[100];
            int    i = stm.Read(b, 0, 100);

            for (int k = 0; k < i; k++)
            {
                temp += Convert.ToChar(b[k]);
            }
            _serverPublicKey = Int32.Parse(temp);

            temp = "";
            b    = new byte[100];
            i    = stm.Read(b, 0, 100);

            for (int k = 0; k < i; k++)
            {
                temp += Convert.ToChar(b[k]);
            }
            _serverConstant = Int32.Parse(temp);

            Messages[0]        = new Message();
            Messages[0].Text   = _serverPublicKey.ToString() + " " + _serverConstant.ToString();
            Messages[0].FromIP = ip.ToString() + " Server";
            Messages[0].ToIP   = _ipAddress;

            Messages[1]        = new Message();
            Messages[1].Text   = message;
            Messages[1].ToIP   = ip.ToString() + " Server";
            Messages[1].FromIP = _ipAddress;

            byte[] encrypt = RSAEncryptor.Encrypt(message, _serverPublicKey, _serverConstant);

            temp = "";
            Byte[] bytes = new Byte[4];
            for (int k = 0; k < encrypt.Length; k += 4)
            {
                temp += BitConverter.ToInt32(encrypt, k).ToString() + " ";
            }

            Messages[2]        = new Message();
            Messages[2].Text   = temp;
            Messages[2].ToIP   = ip.ToString() + " Server";
            Messages[2].FromIP = _ipAddress;

            ASCIIEncoding ascii = new ASCIIEncoding();

            stm.Write(encrypt, 0, encrypt.Length);

            tcpclient.Close();
        }
Пример #5
0
        private void StartServer(string ipAddress, int port)
        {
            IPAddress     ip;
            ASCIIEncoding ascii = new ASCIIEncoding();
            bool          res   = IPAddress.TryParse(ipAddress, out ip);

            if (!res)
            {
                ip = IPAddress.Loopback;
            }
            TcpListener myListener = new TcpListener(ip, port);

            myListener.Start();

            Socket s = myListener.AcceptSocket();

            IPEndPoint remoteEndPoint = s.RemoteEndPoint as IPEndPoint;
            string     clientIP       = remoteEndPoint.Address.ToString();

            Messages[0]        = new Message();
            Messages[0].Text   = _publicKey.ToString() + " " + _coPrimeNumber.ToString();
            Messages[0].FromIP = ip.ToString();
            Messages[0].ToIP   = clientIP + " Client";

            s.Send(ascii.GetBytes(_publicKey.ToString()));
            s.Send(ascii.GetBytes(_coPrimeNumber.ToString()));


            byte[] b = new byte[10000];

            int i = s.Receive(b);

            byte[] transfer = new byte[i];
            for (int k = 0; k < i; k++)
            {
                transfer[k] = b[k];
            }
            _encryptedData = transfer;

            string temp = "";

            Byte[] bytes = new Byte[4];
            for (int k = 0; k < i; k += 4)
            {
                temp += BitConverter.ToInt32(b, k).ToString() + " ";
            }

            Messages[1]        = new Message();
            Messages[1].Text   = temp;
            Messages[1].FromIP = ip.ToString() + " Client";
            Messages[1].ToIP   = clientIP;

            _message = RSAEncryptor.Decrypt(b, _publicKey, _computedPrivateKey, i);


            Messages[2]        = new Message();
            Messages[2].Text   = _message;
            Messages[2].FromIP = ip.ToString() + " Client";
            Messages[2].ToIP   = clientIP;

            s.Close();
            myListener.Stop();
        }