Esempio n. 1
0
        /// <summary>
        /// Принимает файл и сразу шифрует принимаемый поток
        /// Необходимо для исключения нахождения на сервре незашифрованного файла
        /// </summary>
        /// <param name="fileName">Имя создаваемого файлв</param>
        /// <param name="key">Пользовательский ключ шифрования</param>
        /// <returns>Результат</returns>
        public bool ReciveEncryptedFile(string fileName, string key)
        {
            _cryptoController.Key = key;
            var byteFormatter = new BinaryFormatter();

            using (var fs = new FileStream(fileName, FileMode.Create))
            {
                do
                {
                    object recivedObj;
                    try
                    {
                        recivedObj = byteFormatter.Deserialize(_stream);
                    }
                    catch (Exception)
                    {
                        return(false);
                    }
                    var bytes = (byte[])recivedObj;
                    if (bytes.Length == CheckBufferSize)
                    {
                        if (bytes.Any(bt => bt == byte.MaxValue))
                        {
                            break;
                        }
                    }
                    if (bytes.Length % 8 != 0)
                    {
                        var subBytes = new byte[(8 - bytes.Length % 8) + 8];
                        subBytes[subBytes.Length - 1] = (byte)(8 - bytes.Length % 8);
                        bytes = bytes.Concat(subBytes).ToArray();
                    }
                    //шифрование принятого массива байт
                    bytes = _cryptoController.GostEncryptBytes(bytes);
                    fs.Write(bytes, 0, bytes.Length);
                } while (true);
            }
            return(true);
        }