1

Ich habe ein Wörterbuchobjekt, das ich verschlüsseln möchte, dann in eine Querystring, dann entschlüsseln Sie es auf der anderen Seite.Ein Wörterbuch durch verschlüsselte Querystring übergeben

Ich benutze JavaScriptSerializer für diese. Jetzt habe ich dies auf der gleichen Seite onload versucht, und es hat funktioniert. Also die Verschlüsselungs-/Entschlüsselungs-Erweiterungsmethoden, die im Einsatz sind, funktionieren. Das führt mich zu der Annahme, dass mit dem Querystring ein Problem besteht.

z.B.

 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"]; 

In dem obigen Beispiel EncryptString() und DecryptString() sind die Erweiterungsmethoden i bin mit. Dies funktioniert wie vorgesehen, daher zieht es den richtigen Wert für "Name".

Ich habe Probleme, wenn ich die serialisierte verschlüsselte Zeichenfolge in die Querystring legte, dann versuchen und entschlüsseln.

So auf der ersten Seite, habe ich so etwas wie diese:

 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 dann als Abfragezeichenfolgeflag verwendet wird.

Auf der Empfangsseite, ich habe dies:

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(); 
} 

dies einen Fehler wirft: System.FormatException: Invalid length for a Base-64 char array or string. Diese Fehler auf der decryptstring Linie.

ich nicht bekommen, was los ist ... Ich bin urlencoding den Text, bevor es in die Abfragezeichenfolgeflag geht, urldecoding es dann, bevor es deserialisiert ist ..

EDIT

figured it out .. Ich verschlüsselte es zweimal ...

Antwort

2

Wahrscheinlichkeiten sind, dass Sie UrlDecode Ihre Zeichenkette nicht benötigen, weil MVC das vor dem Zuweisen des Wertes Ihres r Parameters getan hat. Versuchen Sie, r direkt zu entschlüsseln.

Und natürlich muss ich die Warnung ausgeben: Was Sie hier tun, scheint wie eine sehr schlechte Idee. Was auch immer Sie versuchen, indem Sie dieses verschlüsselte Wörterbuch in der URL senden, gibt es fast sicher einen besseren Weg, um es zu erreichen.

+0

Das machte keinen Unterschied. Immer noch der gleiche Fehler. – jzm

+0

@rudeovskizebear: Können Sie uns zeigen, wie die URL von diesem 's' Wert generiert wird? – StriplingWarrior

+0

Nun, ich versuchte Wörterbuch, da ich nicht sicher war, was ich sonst noch benutzen sollte. Aber nachdem ich es zum Laufen gebracht habe, bekam ich einen Fehler, der besagt, dass die Wörterbuch-Serialisierung nicht unterstützt wird. Ich habe es jetzt in eine Liste umgewandelt. Was empfehlen Sie? – jzm

1

Höchstwahrscheinlich werden einige Zeichen nicht wie erwartet abgerundet (d. H. "+" Neigt in diesem Fall dazu, ein Leerzeichen zu werden).

Überprüfen Sie mit Fiddler (oder einem anderen HTTP-Debugging-Tool), was tatsächlich an/von Ihrem Server gesendet wird. Dann überprüfen Sie, ob die Zeichenfolge, die zu Ihnen kommt "Display" Aktion - Horror Chance, dass Sie sehen, was falsch ist.