예제 #1
0
        /// <summary>
        /// metoda sluzaca do zalogowania uzytkownika
        /// </summary>
        /// <param name="obj">obiekt sluzacy do uruchomienia metody</param>
        private void Login(object obj)
        {
            client = new TcpClient("127.0.0.1", 5000);
            var reader = new BinaryReader(client.GetStream());
            var serverPKString = reader.ReadString();
            serverPK.FromXmlString(serverPKString);
            user.Username = loginTextBox.Text;
            user.Password = passwordTextBox.Text;
            bool registered=false;

            RSACryptoServiceProvider pk = new RSACryptoServiceProvider();
            user.RSAKeys = pk.ExportParameters(true);

            if (registerRadioButton.Checked)
            {
                registered = false;
            }
            else if (loginRadioButton.Checked)
            {
                registered = true;
            }
            var message = new RegisterMessage(user.Username, user.Password, pk.ExportParameters(false),registered);
            var messageEncrypted = Security.EncryptMessage(message, serverPK.ExportParameters(false));

            var writer = new BinaryWriter(client.GetStream());
            writer.Write(messageEncrypted);

            var t = reader.ReadString();
            var loginReply = (Messages.Message)MessageSerializer.Deserialize(t, typeof(Messages.Message));
            MessageBox.Show(loginReply.data);


            if (loginReply.data.Equals("Chosen username was free. Account added.") || loginReply.data.Equals("Login succeeded."))
            {
                loginButton.EnableButton(false);
                loggedIn = true; 
            }
            while (loggedIn)
            {
                try
                {
                    var buffer = reader.ReadString();
                    if (messageReceived != null)
                    {
                        messageReceived(this, new MessageReceivedEventArgs(buffer));
                    }
                }
                catch (Exception ex) { Console.WriteLine(ex.Message); }
            }


        }
예제 #2
0
 /// <summary>
 /// metoda do szyfrowania wiadomosci rejestracyjnej algorytmen RSa
 /// </summary>
 /// <param name="message">wiadomosc do odszyfrowania</param>
 /// <param name="keyInfo">klucze RSA</param>
 /// <returns>zserializowana i odszyfrowana wiadomosc</returns>
 public static string DecryptMessage(RegisterMessage message, RSAParameters keyInfo)
 {
     var converter = new UnicodeEncoding();
     var username = Convert.FromBase64String(message.Username);
     var password = Convert.FromBase64String(message.Password);
     string decryptedUsername = converter.GetString(RSADecrypt(username, keyInfo, false));
     string decryptedPassword = converter.GetString(RSADecrypt(password, keyInfo, false));
     var decryptedMessage = new RegisterMessage(decryptedUsername, decryptedPassword, message.PublicKey, message.IsRegistred);
     return MessageSerializer.Serialize(decryptedMessage, decryptedMessage.GetType());
 }