/// <summary> /// Отправляет клиенту файл, предварительно расшифровывая его /// </summary> /// <param name="fileName">Путь до файла</param> /// <param name="key">Ключ шифрования</param> /// <returns></returns> public bool SendEncryptedFile(string fileName, string key) { if (!File.Exists(fileName)) { return(false); } _cryptoController.Key = key; var byteFormatter = new BinaryFormatter(); using (var fs = new FileStream(fileName, FileMode.Open)) { while (fs.Position != fs.Length) { var bytes = new byte[fs.Length - fs.Position > BufferLength ? BufferLength : fs.Length - fs.Position]; var bytesCount = fs.Read(bytes, 0, bytes.Length); //Криптографические преобразования над массивом байт bytes = _cryptoController.GostDecryptBytes(bytes); if (fs.Position == fs.Length) { var subBytesCount = bytes.Last() + 8; var lastBytes = new byte[bytes.Length - subBytesCount]; Array.Copy(bytes, lastBytes, bytes.Length - subBytesCount); bytes = lastBytes; } // byteFormatter.Serialize(_stream, bytes); } } var endFileBytes = new byte[CheckBufferSize]; for (var i = 0; i < endFileBytes.Length; i++) { endFileBytes[i] = Byte.MaxValue; } byteFormatter.Serialize(_stream, endFileBytes); return(true); }