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); }
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; } } } } } }
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; } }
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(); }
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(); }