ОК, мне нужно сохранить все, что напечатано в поле форматированного текста, в файл, зашифровать, а также снова получить текст из файла и показать его обратно в поле форматированного текста. Вот мой код сохранения.
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 в файле, но это только для тестирования :)
Что ж, часть сохранения работает нормально, что означает отсутствие исключений... Файл создается в пути к файлу, и файлы ключа и 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 "Поток не поддерживает поиск".
Любые предложения о том, что я могу сделать, чтобы загрузить данные из зашифрованного файла и показать их в текстовом поле?
Key
иIV
. 08.04.2010