ОК, мне нужно сохранить все, что было напечатано в поле расширенного текста, в файл, зашифровано, а также снова извлечь текст из файла и показать его обратно в поле расширенного текста. Вот мой код сохранения.
private void cmdSave_Click(object sender, EventArgs e)
{
FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write);
AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
aes.GenerateIV();
aes.GenerateKey();
aes.Mode = CipherMode.CBC;
TextWriter twKey = new StreamWriter("key");
twKey.Write(ASCIIEncoding.ASCII.GetString(aes.Key));
twKey.Close();
TextWriter twIV = new StreamWriter("IV");
twIV.Write(ASCIIEncoding.ASCII.GetString(aes.IV));
twIV.Close();
ICryptoTransform aesEncrypt = aes.CreateEncryptor();
CryptoStream cryptoStream = new CryptoStream(fs, aesEncrypt, CryptoStreamMode.Write);
richTextBox1.SaveFile(cryptoStream, RichTextBoxStreamType.RichText);
}
Я знаю последствия безопасности для сохранения ключа и iv в файле, но это только для тестирования:)
Хорошо, сохраняющая часть работает нормально, что означает отсутствие исключений ... Файл создается в filePath, а ключ и файлы IV также создаются отлично ...
ОК, теперь можно найти часть, где я застрял: S
private void cmdOpen_Click(object sender, EventArgs e)
{
OpenFileDialog openFile = new OpenFileDialog();
openFile.ShowDialog();
FileStream openRTF = new FileStream(openFile.FileName, FileMode.Open, FileAccess.Read);
AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
TextReader trKey = new StreamReader("key");
byte[] AesKey = ASCIIEncoding.ASCII.GetBytes(trKey.ReadLine());
TextReader trIV = new StreamReader("IV");
byte[] AesIV = ASCIIEncoding.ASCII.GetBytes(trIV.ReadLine());
aes.Key = AesKey;
aes.IV = AesIV;
ICryptoTransform aesDecrypt = aes.CreateDecryptor();
CryptoStream cryptoStream = new CryptoStream(openRTF, aesDecrypt, CryptoStreamMode.Read);
StreamReader fx = new StreamReader(cryptoStream);
richTextBox1.Rtf = fx.ReadToEnd();
//richTextBox1.LoadFile(fx.BaseStream, RichTextBoxStreamType.RichText);
}
Но richTextBox1.Rtf = fx.ReadToEnd();
вызывает криптографическое исключение «Заполнение недопустимо и не может быть удалено».
, в то время как richTextBox1.LoadFile(fx.BaseStream, RichTextBoxStreamType.RichText);
выдает NotSupportedException «Поток не поддерживает поиск».
Любые предложения о том, что я могу сделать, чтобы загрузить данные из зашифрованного файла и показать их в поле расширенного текста?