Шифрование C # с использованием RijndaelManaged - Сохраните файл в формате base64

Сценарий - у меня на сервере несколько файлов, и в соответствии с политикой мы можем хранить только зашифрованные файлы. Мы выполняем некоторую миграцию данных, для этого мы должны переместить эти файлы в облако, и, согласно документации, Base64 - лучший способ передачи зашифрованных данных по сети. Я новичок в шифровании и застрял между этим. Сообщите мне, если это поможет вам.

Как сохранить файл в формате base64?

================================================================

Я новичок в шифровании, получил код из сети и пытался зашифровать файлы с помощью RijndaelManaged, и следующий код работает нормально

public static void EncryptFile(string inputFile, string outputFile)
{

        try
        {
            string password = @"myKey123"; // Your Key Here
            UnicodeEncoding UE = new UnicodeEncoding();
            byte[] key = UE.GetBytes(password);

            string cryptFile = outputFile;
            FileStream fsCrypt = new FileStream(cryptFile, FileMode.Create);

            RijndaelManaged RMCrypto = new RijndaelManaged();

            CryptoStream cs = new CryptoStream(fsCrypt,
                RMCrypto.CreateEncryptor(key, key),
                CryptoStreamMode.Write);

            FileStream fsIn = new FileStream(inputFile, FileMode.Open);

            int data;
            while ((data = fsIn.ReadByte()) != -1)
                cs.WriteByte((byte)data);


            fsIn.Close();
            cs.Close();
            fsCrypt.Close();
        }
        catch
        {
        }
    }

Когда я пытаюсь расшифровать с помощью Convert.FromBase64String, возвращается ошибка

public static string DecryptFile(string inputFile)
        {
            var myRijndael = new RijndaelManaged { Key = _key, IV = _key, Padding = PaddingMode.PKCS7 };
            _decryptor = myRijndael.CreateDecryptor(myRijndael.Key, myRijndael.IV);

            // Create the streams used for decryption.
            using (MemoryStream msDecrypt = new MemoryStream(Convert.FromBase64String(inputFile)))
            {
                using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, _decryptor, CryptoStreamMode.Read))
                {
                    using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                    {
                        return srDecrypt.ReadToEnd();
                    }
                }
            }
        }

Пожалуйста, помогите мне решить эту проблему


person Ajay    schedule 09.02.2017    source источник
comment
Поскольку вы не записываете данные в свой файл в формате Base64 - это очень странно, почему вы ожидаете, что он будет в этом формате и конвертируете из него ....   -  person Andy Korneyev    schedule 09.02.2017
comment
какую ошибку вы получаете? это очень важно для решения проблемы   -  person NicoRiff    schedule 09.02.2017
comment
Кстати, вы должны использовать using в EncryptFile или хотя бы finally. О, и добавьте еще один вокруг ваших RijndaelManaged экземпляров, он реализует IDisposable.   -  person gobes    schedule 09.02.2017
comment
key = UE.GetBytes(password); очень неправильно. Посмотрите PasswordDeriveBytes.   -  person Henk Holterman    schedule 09.02.2017
comment
Многие ошибочные коды работают нормально, если за ними стоит пустой catch{}.   -  person Henk Holterman    schedule 09.02.2017
comment
1. Нет необходимости кодировать данные файла в формате Base64. 2. Ключ должен иметь точную длину поддерживаемых размеров ключа, для AES (Rijndael с размером блока 16 байт) это 128, 192 и 256 бит, в противном случае неопределенное заполнение будет добавлено в неопределенное состояние.   -  person zaph    schedule 09.02.2017
comment
Как декодировать без формата Base64?   -  person Ajay    schedule 09.02.2017
comment
Нет необходимости кодировать или декодировать, просто используйте данные. Шифрование работает с байтами данных.   -  person zaph    schedule 09.02.2017
comment
Я новичок в шифровании и пытался расшифровать с помощью Base64 и Bytes, но получаю ошибку.   -  person Ajay    schedule 09.02.2017
comment
Вам нужно добиться симметрии - если шифровальщик не использует Base64, то и дешифратор не должен.   -  person Henk Holterman    schedule 09.02.2017
comment
Привет .. Я знаю, я не храню файл в формате Base64. Я пытался, но безуспешно. Я получаю необработанное исключение из кода пользователя: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters. Как я могу сохранить зашифрованный файл в формате Base64?   -  person Ajay    schedule 10.02.2017
comment
Зачем вам нужен base64? Ваш вопрос все еще неясен. Отредактируйте его и четко обозначьте свои реальные цели.   -  person Henk Holterman    schedule 10.02.2017
comment
См. Правки (начало вопроса) ......   -  person Ajay    schedule 10.02.2017
comment
Base64 - лучший способ передачи зашифрованных данных по сети справедлив только для передачи по http или другим текстовым протоколам. Ни в коем случае не должно относиться к фактическому хранилищу. Попробуйте найти существующие решения для шифрования и транспорта. Безопасность своими руками никогда не бывает хорошей идеей.   -  person Henk Holterman    schedule 10.02.2017
comment
Мы сталкиваемся с проблемами шифрования и пытаемся сохранить файл в формате base64.   -  person Ajay    schedule 10.02.2017
comment
он возвращает ошибку Я вам не верю. Я прочитал весь вопрос и не увидел сообщения об исключении. Вам следует редактировать, добавить полную информацию об исключении и доказать, что я лжец.   -  person    schedule 10.02.2017
comment
Я здесь не ради времени. Прочтите 6-7 комментариев снизу. Я тоже опубликовал сообщение об ошибке.   -  person Ajay    schedule 11.02.2017
comment
Я лишь смутно понимаю вашу проблему / вопрос. Слишком много упущено и слишком много неверно, чтобы дать вам прямой ответ. Лучший совет - разделить это на а) шифрование с использованием byte[] и б) транспортировку / хранение с использованием строк Base64.   -  person Henk Holterman    schedule 11.02.2017