Esempio n. 1
0
        //====================================================================================================
        //Ответ на попытку авторизации
        private void AUTH_Send_Message()
        {
            this.response_buf = new byte[Client.command_length];
            if (UsersData.IsUserExist(ref user_inf, ref Server.UserList))
            {
                this.flag   = true;                                                   //Взаимодействие с пользователем активировано
                this.folder = Encoding.Default.GetString(user_inf.login_hash) + "//"; //Задаём персональное имя папки пользователя

                //Отправляем ответ об успешной авторизации
                this.response_buf[0] = Convert.ToByte(ServerAnswers.OK);
                networkStream.Write(response_buf, 0, response_buf.Length);

                //Обмениваемся ключами и создаём секретный
                aes = new DIFFIE_HELMAN();
                file.KeysExchange(client, networkStream, aes);

                //Ждать зашифрованные хэши
                while (client.Connected)
                {
                    if (networkStream.DataAvailable)
                    {
                        byte[] login = null;
                        FileProtocolReader.Read(ref login, networkStream);
                        login = aes.Decript(login);

                        byte[] password = null;
                        FileProtocolReader.Read(ref password, networkStream);
                        password = aes.Decript(password);

                        SHA256 sHA = SHA256Managed.Create();

                        if (sHA.ComputeHash(login).ToString() == user_inf.login_hash.ToString() &&
                            sHA.ComputeHash(password).ToString() == user_inf.login_hash.ToString())
                        {
                            this.response_buf[0] = Convert.ToByte(ServerAnswers.OK);
                            networkStream.Write(response_buf, 0, response_buf.Length);

                            //Посылаем информацию о названиях всех доступных файлах
                            FileHierarchy fileHierarchy = new FileHierarchy(this.folder);
                            fileHierarchy.NetworkSendInfo(networkStream, aes);
                        }
                        else
                        {
                            this.response_buf[0] = Convert.ToByte(ServerAnswers.NOPE);
                            networkStream.Write(response_buf, 0, response_buf.Length);
                        }
                        break;
                    }
                }
            }
            else
            {
                this.response_buf[0] = Convert.ToByte(ServerAnswers.NOPE);
                networkStream.Write(response_buf, 0, response_buf.Length);
                Disconnect();
            }
        }
Esempio n. 2
0
 //====================================================================================================
 //Ответ на попытку регистрации
 private void REG_Send_Message()
 {
     this.response_buf = new byte[Client.command_length];
     if (UsersData.IsUserExist(ref user_inf, ref Server.UserList))
     {
         this.response_buf[0] = Convert.ToByte(ServerAnswers.NOPE); //Такой пользователь существует
     }
     else
     {
         user_inf.key = RandomKey.GetKey(8);
         Server.UserList.Add(user_inf);                           //Пополняем список новым пользователем
         UsersData.WriteUsersInf(Server.users_inf_way, Server.UserList);
         this.folder = Encoding.Default.GetString(user_inf.login_hash) + "//";
         Directory.CreateDirectory(this.folder);
         this.response_buf[0] = Convert.ToByte(ServerAnswers.OK); //Регистрания пройдена успешно
     }
     networkStream.Write(response_buf, 0, response_buf.Length);
 }