2009-04-29 5 views
1

Ich bin ein Text verschlüsseln und senden sie über QueryString.Was ist das Problem mit diesem verschlüsselten QueryString - Ungültige Länge für ein Base-64 Char-Array

"8ZnSq13yv2yYVDsehDnNUNp/yIFqsAQh4XNPbV1eLMpk/dMWpc/YnMMEBy29MlgcYqpV2XPOf/Rpiz5S85VN/fkLbGTCkL/clBHh983Cp s=" 

Die Decrypt Funktion unten

public static string Decrypt(string stringToDecrypt)//Decrypt the content 
{ 
    try 
    { 
     byte[] key = Convert2ByteArray(DESKey); 
     byte[] IV = Convert2ByteArray(DESIV); 
     int len = stringToDecrypt.Length; 
     byte[] inputByteArray = Convert.FromBase64String(stringToDecrypt); 

     DESCryptoServiceProvider des = new DESCryptoServiceProvider(); 
     MemoryStream ms = new MemoryStream(); 

     CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(key, IV), CryptoStreamMode.Write); 
     cs.Write(inputByteArray, 0, inputByteArray.Length); 

     cs.FlushFinalBlock(); 

     Encoding encoding = Encoding.UTF8; return encoding.GetString(ms.ToArray()); 
    } 
    catch (System.Exception ex) 
    { 
     throw ex; 
    } 
} 

gegeben Was soll ich tun, um dieses Problem zu lösen?

Antwort

0

Ich sehe ein Leerzeichen am Ende zwischen und s. Dies ist kein zulässiges Zeichen in einer Base64-Zeichenfolge.

6

Das drittletzte Zeichen ist ein Leerzeichen. Ich vermute, dass es im Original ein + war, bevor es in die Abfragezeichenfolge eingefügt wurde. + ist ein Sonderzeichen für die URL, die ein Leerzeichen darstellt. Der QueryString konvertiert dies in einen Platz auf Ihnen.

Versuchen Sie Base64-String durch

Server.UrlEncode(string); 

vor & Umleitung vorbei, die richtig die + in einer% urlchar entkommen und dann

durch
Server.UrlDecode(string); 

, bevor es auf teh anderen Seite Parsen

passieren
+1

Die Decodierung der Querystring-Werte erfolgt bereits bei der Analyse in der Request.QueryString-Auflistung, sodass nur die Codierung erforderlich ist. – Guffa

0

Das Problem besteht wahrscheinlich darin, dass Ihre Zeichenfolge Zeichen enthält, die eine besondere Bedeutung für die Anforderungsabfrage haben. '/', '=' und '' zum Beispiel.

Sie können die Zeichenfolge vor dem Senden codieren oder noch besser zum Formularkörper der Anfrage hinzufügen und sie so anstelle der Abfragezeichenfolge senden.

-1

Sieht ein Zeichen kurz zu mir ... Base64-Strings' Länge durch 4 teilbar sein sollte, gepolstert durch nachlauf ‚=‘ falls notwendig - fehlt Ihnen ein abschließendes ‚=‘, also sollte es sein „8ZnSq13yv2yYVDsehDnNUNp/yIFqsAQh4XNPbV1eLMpk/dMWpc/YnMMEBy29MlgcYqpV2XPOf/Rpiz5S85VN/fkLbGTCkL/clBHh983Cps == "?

+0

obwohl ich die Antwort nicht heruntergestimmt habe, ist es in der Tat falsch. (derjenige, der Downvote gemacht hat, sollte einen Kommentar hinzufügen, warum). Die Base64 Pads stellen sicher, dass ihre Bits durch 6 teilbar sind. Ein '=' bedeutet, dass der Decoder die letzten 2 Bits ignorieren sollte, zwei '=' bedeutet, dass der Decoder die letzten 4 Bits ignorieren sollte. –

+0

Danke ... das widerspricht dem, was ich über Base64 gelernt habe. Wenn dir jemand sagt, dass du falsch liegst, ist es hilfreich zu wissen, warum! Sieht so aus, als müsste ich etwas lesen ... – user24081