Rijndael
を使用して一部の文字列(実際にはXElement
オブジェクトを暗号化する方法)を暗号化しようとしています。しかし、解読するときには、埋め込みが無効であり、削除することができないというメッセージでCryptographicException
がスローされます。 私はPaddingMode
、FlushFinalBlock()
の方法などを挙げている解決策についていくつかの記事を検索してきました。 また、FileStream
から直接読み取るとストリームの長さがファイルの長さに設定されるため、パディングの余地がないため、問題の解決方法はわかりません。親切にあなたの提案をしてください。Rijndaelを使用して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();
}
'FlushFinalBlock()'を試してください –
試しました。問題は残っています。 –