.NET 4.x Шифрование файлов AES алгоритмом - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, не могу решить проблему с дешифровкой файлов, при дешифровке строки написанные русскими буквами превращаются в псевдографику (квадраты). Прошу помочь в данной проблеме! Вот код дешифровки:
if (openfile.ShowDialog() == DialogResult.OK)
            {
                    FileStream fsFileIn = File.OpenRead(textBox2.Text);
 
                    FileStream fsKeyFile = File.OpenRead(openfile.FileName);
 
                    FileStream fsFileOut = File.Create(textBox2.Text+"_decrypt");
 
                    AesCryptoServiceProvider cryptAlgorithm = new AesCryptoServiceProvider();
                    BinaryReader brFile = new BinaryReader(fsKeyFile);
                    cryptAlgorithm.Key = key;
                    cryptAlgorithm.IV = iv;

                    CryptoStream csEncrypt = new CryptoStream(fsFileIn, cryptAlgorithm.CreateDecryptor(), CryptoStreamMode.Read);

                    StreamReader srStream = new StreamReader(csEncrypt);
                    StreamWriter swStream = new StreamWriter(fsFileOut);
                        
                    swStream.WriteLine(srStream.ReadToEnd());
                    
                    swStream.Close();
                    fsFileOut.Close();
                    srStream.Close();
 
            }

Решение задачи: «.NET 4.x Шифрование файлов AES алгоритмом»

textual
Листинг программы
using ( var fs = File.Open( fileIn, FileMode.Open, FileAccess.Read ) ) {
// Создаем буфер длинной в файл + 8 байт, для хранения изначальной
// длины файла, т.к. при шифровании используется выравнивание по
// определенной длине блока (например 512 байт, или 1024)
// тем самым файл может немного "раздуть" и оригинал при дешифровке
// мы уже не получим
buff = new byte[fs.Length + sizeof( long )];
// Читаем данные в буфер не с самого начала, а со смещением 8 байт
fs.Read( buff, sizeof( long ), buff.Length - sizeof( long ) );
/* Записываем в первые 8 байт длину исходного файла
 * нужно это для того чтобы, после дешифровки не было
 * лишних данных
 */
int i = 0;
// Перевод значение из long в byte[]
foreach ( byte @byte in BitConverter.GetBytes( fs.Length ) )
    buff[i++] = @byte;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5