예제 #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();
            }
        }
예제 #2
0
        public void GetClientInfHash(ClientCommands command)
        {
            try
            {
                byte[] login_hash = null;
                FileProtocolReader.Read(ref login_hash, networkStream);

                byte[] password_hash = null;
                FileProtocolReader.Read(ref password_hash, networkStream);

                ToUserHash(command, login_hash, password_hash);
            }
            catch (Exception error)
            {
                Console.Error.WriteLine(error.Message);
                Disconnect();
                return;
            }
        }