.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;