using System; using System.Text; using System.Net; using System.Net.Sockets; using System.Security.Cryptography; namespace Server { class Program { static void Main(string[] args) { Console.Title = "Server"; TcpListener listener = new TcpListener(IPAddress.Parse("46.20.46.198"), 81); listener.Start(); Console.WriteLine("Listening on {0}", listener.LocalEndpoint); while (true) { try { Socket s = listener.AcceptSocket(); byte[] bytesToReveive = new byte[2048]; int received = s.Receive(bytesToReveive, 0, bytesToReveive.Length, SocketFlags.None); Array.Resize(ref bytesToReveive, received); string data = Decrypt(Encoding.Default.GetString(bytesToReveive), true); string[] dataArray = data.Split('/'); string username = dataArray[0]; string password = dataArray[1]; byte[] bytesToSend = new byte[2048]; if (UserManagment.Exists(username, password)) { string login = UserManagment.Autentication(username); switch (login) { case "-1": Console.ForegroundColor = ConsoleColor.DarkYellow; Console.WriteLine(s.RemoteEndPoint + " | " + DateTime.Now); Console.WriteLine("Username: {0}", username); Console.WriteLine("Warning: Username has been banned.\n"); break; case "2": Console.ForegroundColor = ConsoleColor.DarkYellow; Console.WriteLine(s.RemoteEndPoint + " | " + DateTime.Now); Console.WriteLine("Username: {0}", username); Console.WriteLine("Warning: Not allowed to login.\n"); break; default: Console.ForegroundColor = ConsoleColor.DarkGreen; Console.WriteLine(s.RemoteEndPoint + " | " + DateTime.Now); Console.WriteLine("Username: {0}", username); Console.WriteLine("Success: {0}\n", login); break; } bytesToSend = Encoding.Default.GetBytes(Encrypt(login, true)); s.Send(bytesToSend, 0, bytesToSend.Length, SocketFlags.None); } else { bytesToSend = Encoding.Default.GetBytes(Encrypt("0", true)); s.Send(bytesToSend, 0, bytesToSend.Length, SocketFlags.None); Console.ForegroundColor = ConsoleColor.DarkMagenta; Console.WriteLine(s.RemoteEndPoint + " | " + DateTime.Now); Console.WriteLine("Failed: Username/Password Incorrect.\n"); } } catch { Console.ForegroundColor = ConsoleColor.DarkMagenta; Console.WriteLine(DateTime.Now); Console.WriteLine("Failed: Bad Request\n"); } } } public static string Encrypt(string toEncrypt, bool useHashing) { byte[] keyArray; byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt); string key = "mpiuqgi6zO8uoVogsBp8h5v9g7EuQ3bSBlM9agqA2Nnm4elloOfENIUFGHdW"; if (useHashing) { MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider(); keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key)); hashmd5.Clear(); } else keyArray = UTF8Encoding.UTF8.GetBytes(key); TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); tdes.Key = keyArray; tdes.Mode = CipherMode.ECB; tdes.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = tdes.CreateEncryptor(); byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); tdes.Clear(); return Convert.ToBase64String(resultArray, 0, resultArray.Length); } public static string Decrypt(string cipherString, bool useHashing) { byte[] keyArray; byte[] toEncryptArray = Convert.FromBase64String(cipherString); string key = "mpiuqgi6zO8uoVogsBp8h5v9g7EuQ3bSBlM9agqA2Nnm4elloOfENIUFGHdW"; if (useHashing) { MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider(); keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key)); hashmd5.Clear(); } else { keyArray = UTF8Encoding.UTF8.GetBytes(key); } TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); tdes.Key = keyArray; tdes.Mode = CipherMode.ECB; tdes.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = tdes.CreateDecryptor(); byte[] resultArray = cTransform.TransformFinalBlock( toEncryptArray, 0, toEncryptArray.Length); tdes.Clear(); return UTF8Encoding.UTF8.GetString(resultArray); } } }