2012-04-05 11 views
1

私は暗号化したい辞書オブジェクトを持っていて、それをクエリ文字列に入れて、反対側で解読します。暗号化されたクエリ文字列を使用して辞書を渡す

私はこれにJavaScriptSerializerを使用しています。今私は同じページのonloadでこれを試して、それが働いた。したがって、使用している暗号化/復号化拡張メソッドが機能しています。これは私にクエリーストーンで起こっている問題があると信じさせます。

上記の例で

 var js = new JavaScriptSerializer(); 
     var d = new Dictionary<string, string>(); 
     d.Add("ID", "123456"); 
     d.Add("Name", "HELLO TEST"); 
     d.Add("Email", "[email protected]"); 
     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", "[email protected]"); 
     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(); 
} 

これは、エラーがスローされます。decryptstringライン上​​このエラーを。私は何が起こっているのかを取得しない

それは、クエリ文字列に入る前に...私はそれが逆シリアル化される前、それをurldecoding、テキストをURLエンコードしています。..

EDIT

はそれを考え出しました..私は2回それを暗号化していました...

答えて

2

あなたのrパラメータの値を割り当てる前にMVCがこれを行ったので、あなたの文字列をUrlDecodeする必要はありません。 rを直接解読してみてください。

もちろん、私は警告を発行する必要があります。ここでやっていることは非常に悪い考えです。この暗号化された辞書をURLに送信することによって達成しようとしていることは何でも、それを達成するためのほぼ確実な方法があります。

+0

違いはありませんでした。それでも同じエラー。 – jzm

+0

@rudeovskiz​​ebear:この 's'値からURLがどのように生成されているかを教えてください。 – StriplingWarrior

+0

私は他に何を使うべきか分からなかったので、私は辞書を試しました。しかし、私はそれが動作するようになった後、私はエラーが辞書シリアル化がサポートされていないと言っている。私は今それを代わりにリストに変換しました。何がお勧めですか? – jzm

1

ほとんどの場合、一部の文字は予想通りに往復しません(つまり、「+」はこの場合はスペースになる傾向があります)。

Fiddler(または他のHTTPデバッグツール)で実際にサーバーとの間で送受信される内容を確認してください。あなたに来る文字列があるかどうかチェックします。 "表示する"アクション - 間違っていることが分かるチャンスです。

関連する問題