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); }
//==================================================================================================== //Ответ на попытку авторизации 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(); } }
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; } } }
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; }*/ } }
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; } } }