Beispiel #1
0
        public void RasEncryptTest()
        {
            RSAEncrypt Rsa = new RSAEncrypt();

            Rsa.GenerateKeys("d://pems");
            string s     = "王进锋";
            string s1    = "jfwang123";
            var    spwd  = Rsa.Encrypt(s, "d://pems/RSA.Pub");
            var    s1pwd = Rsa.Encrypt(s1, "d://pems/RSA.Pub");

            Assert.Equal(Rsa.Decrypt(spwd, "d://pems/RSA.Private"), s);
            Assert.Equal(Rsa.Decrypt(s1pwd, "d://pems/RSA.Private"), s1);
        }
Beispiel #2
0
        public static void HandleClients(TcpClient client)
        {
            string publicKey;
            string privateKey;
            int    KeySize = 2048;

            RSAEncrypt.GenerateKeys(KeySize, out publicKey, out privateKey);

            while (true)
            {
                if (client.Available > 0)
                {
                    // Setup reader/writer stream
                    NetworkStream stream = client.GetStream();
                    StreamReader  Reader = new StreamReader(stream);
                    StreamWriter  Writer = new StreamWriter(stream)
                    {
                        AutoFlush = true
                    };

                    string   data     = Reader.ReadLine();
                    ChatUser chatUser = JsonConvert.DeserializeObject <ChatUser>(data);
                    if (chatUser.CommandInter == (int)ChatUser.Command.getRSAKey)
                    {
                        chatUser.RsaKey = publicKey;
                        list_clients.TryAdd(chatUser.ChatUserId, client);
                        chatUsers.Add(chatUser);
                        stream = list_clients[chatUser.ChatUserId].GetStream();
                        string Input = JsonConvert.SerializeObject(chatUser);
                        Writer.WriteLine(Input);
                    }
                    else if (chatUser.CommandInter == (int)ChatUser.Command.AddChatUser)
                    {
                        chatUser.DesKey = RSAEncrypt.Decrypt(chatUser.DesKey, KeySize, publicKey);
                        client          = list_clients[chatUser.ChatUserId];
                        Console.WriteLine(chatUser.User.UserName + " entrou na sala " + chatUser.Chat.Name + "!");
                        chatUser.Message = Encrypt(chatUser.User.UserName + " entrou na sala " + chatUser.Chat.Name + "!", chatUser.DesKey);
                        Broadcast(chatUser);
                    }
                    else if (chatUser.CommandInter == (int)ChatUser.Command.DeleteChatUser)
                    {
                        client.Client.Shutdown(SocketShutdown.Both);
                        client.Close();
                        TcpClient tcpRemove;
                        list_clients.TryRemove(chatUser.ChatUserId, out tcpRemove);
                        ChatUser userToRemove = chatUsers.Find(c => c.ChatUserId == chatUser.ChatUserId);
                        chatUsers.Remove(userToRemove);
                        Console.WriteLine(chatUser.User.UserName + " saiu da sala " + chatUser.Chat.Name + "!");
                        chatUser.Message = Encrypt(chatUser.User.UserName + " saiu da sala " + chatUser.Chat.Name + "!", chatUser.DesKey);
                        Broadcast(chatUser);
                        break;
                    }
                    else if (chatUser.CommandInter == (int)ChatUser.Command.SendMessage)
                    {
                        // Decrypt the bytes to a string.
                        string messageDecrypted = Decrypt(chatUser.Message, chatUser.DesKey);

                        Console.WriteLine("Sala: " + chatUser.Chat.Name + "-" + chatUser.User.UserName + ": " + messageDecrypted);
                        Broadcast(chatUser);
                    }
                }
            }
        }