暗号化したい辞書オブジェクトがあり、それをクエリ文字列に入れてから、反対側で復号化します。
これには JavaScriptSerializer を使用しています。今、同じページのオンロードでこれを試してみましたが、うまくいきました。したがって、使用している暗号化/復号化拡張メソッドは機能しています。これにより、クエリ文字列で何らかの問題が発生していると思われます。
例えば
var js = new JavaScriptSerializer();
var d = new Dictionary<string, string>();
d.Add("ID", "123456");
d.Add("Name", "HELLO TEST");
d.Add("Email", "test@email.com");
var s = js.Serialize(d).EncryptString();
var ds = js.Deserialize<Dictionary<string, string>>(s.DecryptString());
@ViewBag.Test = ds["Name"];
上記の例では、EncryptString()
とDecryptString()
は私が使用している拡張メソッドです。これは意図したとおりに機能するため、 の正しい値が引き出され"Name"
ます。
シリアル化された暗号化された文字列をクエリ文字列に入れてからデコードしようとすると、問題が発生します。
したがって、最初のページには、次のようなものがあります。
var js = new JavaScriptSerializer();
var d = new Dictionary<string, string>();
d.Add("ID", "123456");
d.Add("Name", "HELLO TEST");
d.Add("Email", "test@email.com");
var s = HttpUtility.UrlEncode(js.Serialize(d).EncryptString());
s
その後、クエリ文字列として使用されます。
受信ページには、これがあります:
public ActionResult Display(string r)
{
var js = new JavaScriptSerializer();
var decryptedString = HttpUtility.UrlDecode(r).DecryptString();
var s = js.Deserialize<Dictionary<string, string>>(decryptedString);
return View();
}
これにより、エラーがスローされます。System.FormatException: Invalid length for a Base-64 char array or string.
このエラーは、decryptstring 行で発生します。
何が起こっているのかわかりません...クエリ文字列に入る前にテキストをurlencodingし、デシリアライズする前にurldecodingしています..
編集
それを理解しました..私はそれを2回暗号化していました...