Ejemplo n.º 1
0
        public void NetworkSendInfo(NetworkStream stream, DIFFIE_HELMAN aes)
        {
            string hierarhy = GetInfo();                 //Массив стрингов

            byte[] arr = new byte[hierarhy.LongCount()]; //Длина сериализованной строки
            arr = Encoding.Default.GetBytes(hierarhy);   //Конвертируем в байты
            arr = aes.Encrypt(arr);                      // Шифруем
            FileProtocolReader.Write(arr, stream);
        }
Ejemplo n.º 2
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();
            }
        }
Ejemplo n.º 3
0
 public void KeysExchange(TcpClient client, NetworkStream networkStream, DIFFIE_HELMAN aes)
 {
     //Отправляем свой ключ
     FileProtocolReader.Write(aes.PublicKey, networkStream);
     FileProtocolReader.Write(aes.IV, networkStream);
     while (client.Connected)
     {
         if (networkStream.DataAvailable)
         {
            byte[] client_key = null;
            FileProtocolReader.Read(ref client_key, networkStream);
            aes.CreateSecretKey(client_key);
            return;
         }
     }
 }
Ejemplo n.º 4
0
        public void SecurityLoadAndSave(string file_name, NetworkStream networkStream, byte[] key, DIFFIE_HELMAN aes)
        {
            using (stream = new FileStream(file_name, FileMode.CreateNew))
            {
                /*networkStream.Read(file_length, 0, file_length.Length); //Считываем  длину данных в потоке
                long length = BitConverter.ToInt64(file_length, 0);     //Переводим длину*/

                byte[] file_data = null;
                FileProtocolReader.Read(ref file_data,networkStream);
                file_data = aes.Decript(file_data);
                this.buf = StreamEncryptor.Encrypt(file_data, key);   //Шифруем потоковым шифратором
                stream.Write(buf, 0, buf.Length); //Записываем данные в файл

                /*int read = 0;
                while (networkStream.DataAvailable)
                {
                    read = networkStream.Read(this.buf, 0, buf.Length); //Считываем данные из сетевого потока
                    aes.Decript(this.buf);                          //Дешифруем данные из сети
                    this.buf = StreamEncryptor.Encrypt(this.buf,key);   //Шифруем потоковым шифратором
                    stream.Write(buf, 0, read); //Записываем данные в файл
                    length -= read;
                }*/
            }
        }
Ejemplo n.º 5
0
 public void SecurityLoadAndSend(string file_name, NetworkStream networkStream, byte[] key, DIFFIE_HELMAN aes)
 {
     using (stream = new FileStream(file_name, FileMode.Open))
     {
         long length = stream.Length;
         int read = 0;
         file_length = BitConverter.GetBytes(stream.Length);
         aes.Encrypt(this.file_length);                      //Шифруем длину данных
         networkStream.Write(file_length, 0, file_length.Length);
         
         while (length > 0)
         {
             read = stream.Read(buf, 0, buf.Length);
             this.buf = StreamEncryptor.Encrypt(this.buf, key); //Дешифруем данные ключём потокового шифратора
             aes.Encrypt(this.buf);                         //Шифруем данные для передачи по сети
             networkStream.Write(this.buf, 0, read);
             length -= read;
         }
     }
 }