2016-05-24 5 views
0

Я пытаюсь зашифровать файл, используя пример MSDN https://msdn.microsoft.com/ru-ru/library/system.security.cryptography.aes(v=vs.110).aspx Когда я шифрую .txt-файл, все в порядке, но когда я пытаюсь зашифровать другие файлы (.bmp, .pdf ...) , то файл не дешифруется. Где ошибка?AES Шифрование в C#

Я изменил код для загрузки файла

internal static void EncryptAes(string pathData, string pathEnCrypt) 
    { 
     string plainText; 
     using (StreamReader sr = new StreamReader(pathData)) 
      plainText = sr.ReadToEnd(); 
     byte[] encrypted; 
     // Create an Aes object 
     // with the specified key and IV. 
     using (Aes aesAlg = Aes.Create()) 
     { 
      aesAlg.Key = Key; 
      aesAlg.IV = IV; 

      // Create a decrytor to perform the stream transform. 
      ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); 

      // Create the streams used for encryption. 
      using (MemoryStream msEncrypt = new MemoryStream()) 
      { 
       using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) 
       { 
        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) 
        { 

         //Write all data to the stream. 
         swEncrypt.Write(plainText); 
        } 
        encrypted = msEncrypt.ToArray(); 
       } 
      } 
      using (FileStream fstream = new FileStream(pathEnCrypt, FileMode.Create)) 
       fstream.Write(encrypted, 0, encrypted.Length); 
     } 
    } 
+2

«когда я пытаюсь зашифровать другие файлы (.bmp, .pdf ...), затем файл не расшифрован ». Вы имели в виду «тогда файл не был ENcrypted»? Или это действительно дешифрование впоследствии, что не удается? –

+0

зашифрован, так как это странно, размер файла увеличивается наполовину. И тогда он может расшифровать, но открыть его все равно не получится. – d65u

+1

Можете ли вы просто использовать BinaryReader и BinaryWriter вместо (не StreamReader и StreamWriter), поскольку bmp и т. Д. Являются двоичными файлами ... –

ответ

2

StreamReader предполагается работать с текстовыми данными в определенной кодировке. Следовательно, вы не можете использовать его для двоичных данных.

Если файл не является огромным, вы можете прочитать его содержимое в MemmoryStream и использовать его для AES.

0

Выполнение шестнадцатеричных/двоичных данных, как если бы это была строка, приведет к потере данных, и вы не сможете полностью восстановить их. Чтобы получить дополнительную идею, вы можете проверить this, она объясняет, что вы хотели бы сделать для VB.NET

Смежные вопросы