Я пытаюсь зашифровать некоторые строки (фактически обходной путь для шифрования объекта XElement
) в файл с использованием Rijndael
.Однако при расшифровке выдается CryptographicException
с сообщением « Заполнение недопустимо и не может быть удалено ».Я искал несколько сообщений для возможных решений, в которых кто-то упоминает PaddingMode
, метод FlushFinalBlock()
и другие.Также кто-то упоминал, что это потому, что чтение непосредственно из FileStream
установит длину потока равной длине файла, таким образом, не оставляя места для заполнения, но я не знаю, как решить проблему.Пожалуйста, дайте ваши предложения.
var root = new XElement("Users",
new XElement("User", new XAttribute("id", "1"), "User1"),
new XElement("User", new XAttribute("id", "2"), "User2"));
var r = Rijndael.Create();
r.Padding = PaddingMode.PKCS7;
using (var fs = File.Open(@"D:\user.xml", FileMode.Create))
using (var cs = new CryptoStream(fs, r.CreateEncryptor(r.Key, r.IV), CryptoStreamMode.Write))
using (var sw = new StreamWriter(cs, Encoding.Unicode))
{
sw.Write(root.ToString());
cs.FlushFinalBlock();
}
var r = Rijndael.Create();
r.Padding = PaddingMode.PKCS7;
using(var fs = File.Open(@"D:\user.xml", FileMode.Open, FileAccess.ReadWrite))
using(var cs = new CryptoStream(fs, r.CreateDecryptor(r.Key, r.IV), CryptoStreamMode.Read))
using (var sr = new StreamReader(cs, Encoding.Unicode))
{
var root = sr.ReadToEnd();
}