2016-09-08 4 views
0

Ich versuche, eine Base64-Zeichenfolge in HTML-Code zu konvertieren, den ich von meiner E-Mail über Gmail API in WinRT erhalte. Aber das Problem ist, dass beim Konvertieren der Base64-Zeichenfolge in Byte-Array eine FormatException geworfen wird. Auch wenn ich es auf der base64decode Website decodiert, decodiert es perfekt die Base64-Zeichenfolge.Fehler beim Konvertieren der Base64-Zeichenfolge

Dies ist die Base64 Zeichenfolge, die ich zu dekodieren versuche:

PGltZyBzcmM9Imh0dHA6Ly9jY3Byb21haWwuY29tOjgxODEvYWRtaW1wLmpzcD9pZD1UaUUtbldrcGhESUJuaHNUS2t0NENpclQzTHVvY09ZOVV2czJDb1lFbGo4YjZJWjl0TWp6SzNvRUpERkVHZnBnIiBib3JkZXI9IjAiIGhlaWdodD0iMCIgd2lkdGg9IjAiPjxkaXYgc3R5bGU9IndpZHRoOjYwMHB4OyAgZm9udC1mYW1pbHk6QXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxOHB4OyBsaW5lLWhlaWdodDoyMnB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4gIDxmb250IHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsgZm9udC1zaXplOiAyMHB4OyBjb2xvcjogcmVkOyI-IEdST1cgWU9VUiBPV04gSEFJUiBGT1IgSlVTVCAxIFJTLjwvZm9udD4gIDxicj4gIDxicj4gIDxmb250IHN0eWxlPSJjb2xvcjpncmVlbjtmb250LXdlaWdodDogYm9sZDsiPkludGVyZXN0IEZyZWUgRU1JPGJyPjxicj4xIFJzLiBEb3duIFBheW1lbnQ8L2Zv BNQ-ICA8YnI-ICA8YnI-ICA8YSBocmVmPSJodHRwOi8vY2Nwcm9tYWlsLmNvbTo4MTgxL3RyYWNrLmpzcD9pZD1UaUUtbldrcGhESUJuaHNUS2t0NENpclQzTHVvY09ZOVV2czJDb1lFbGo4YjZJWjl0TWp6SzNvRUpERkVHZnBnIiBzdHlsZT0iY29sb3I6IGJsdWU7IGJhY2tncm91bmQtY29sb3I6IHllbGxvdzsiPkdldCBZb3VyIEFwcG9pbnRtZW50IE5vdzwvYT4gIDxicj4gIDxicj4gPC9kaXY-PGJyLz48ZGl2IHN0eWxlPSJmb250LXNpemU6OXB4O3dpZHRoOjYwMHB4O21hcmdpbi1sZWZ0OiAxNTBweDsiPjxhIGhyZWY9Imh0dHA6Ly9jY3Byb21haWwuY29tOjgxODEvdHJhY2suanNwP2lkPVRpRS1uV2twaERJQm5oc1RLa3Q0Q2lyVDNMdW9jT1k5VXZzMkNvWUVsajhiNklaOXRNanpLM29FSkRGRUdmcGcmdT1hIj5DbGljayBIZXJlPC9hPiB0byB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbmV3c2xldHRlci48YnIvPjwvZGl2Pg0K

EDIT: Dies ist der Code, den ich um die Zeichenfolge zu entschlüsseln bin mit:

string raw = "PGltZyBzcmM9Imh0dHA6Ly9jY3Byb21haWwuY29tOjgxODEvYWRtaW1wLmpzcD9pZD1UaUUtbldrcGhESUJuaHNUS2t0NENpclQzTHVvY09ZOVV2czJDb1lFbGo4YjZJWjl0TWp6SzNvRUpERkVHZnBnIiBib3JkZXI9IjAiIGhlaWdodD0iMCIgd2lkdGg9IjAiPjxkaXYgc3R5bGU9IndpZHRoOjYwMHB4OyAgZm9udC1mYW1pbHk6QXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxOHB4OyBsaW5lLWhlaWdodDoyMnB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4gIDxmb250IHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsgZm9udC1zaXplOiAyMHB4OyBjb2xvcjogcmVkOyI-IEdST1cgWU9VUiBPV04gSEFJUiBGT1IgSlVTVCAxIFJTLjwvZm9udD4gIDxicj4gIDxicj4gIDxmb250IHN0eWxlPSJjb2xvcjpncmVlbjtmb250LXdlaWdodDogYm9sZDsiPkludGVyZXN0IEZyZWUgRU1JPGJyPjxicj4xIFJzLiBEb3duIFBheW1lbnQ8L2ZvbnQ-ICA8YnI-ICA8YnI-ICA8YSBocmVmPSJodHRwOi8vY2Nwcm9tYWlsLmNvbTo4MTgxL3RyYWNrLmpzcD9pZD1UaUUtbldrcGhESUJuaHNUS2t0NENpclQzTHVvY09ZOVV2czJDb1lFbGo4YjZJWjl0TWp6SzNvRUpERkVHZnBnIiBzdHlsZT0iY29sb3I6IGJsdWU7IGJhY2tncm91bmQtY29sb3I6IHllbGxvdzsiPkdldCBZb3VyIEFwcG9pbnRtZW50IE5vdzwvYT4gIDxicj4gIDxicj4gPC9kaXY-PGJyLz48ZGl2IHN0eWxlPSJmb250LXNpemU6OXB4O3dpZHRoOjYwMHB4O21hcmdpbi1sZWZ0OiAxNTBweDsiPjxhIGhyZWY9Imh0dHA6Ly9jY3Byb21haWwuY29tOjgxODEvdHJhY2suanNwP2lkPVRpRS1uV2twaERJQm5oc1RLa3Q0Q2lyVDNMdW9jT1k5VXZzMkNvWUVsajhiNklaOXRNanpLM29FSkRGRUdmcGcmdT1hIj5DbGljayBIZXJlPC9hPiB0byB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbmV3c2xldHRlci48YnIvPjwvZGl2Pg0K"; 
string codedbody = raw.Replace("-", "+"); 
codedbody = raw.Replace("_", "/"); 
byte[] data = Convert.FromBase64String(codedbody); 
string body = Encoding.UTF8.GetString(data); 
+3

anzeigen Code, wie Sie entschlüsseln . – BWA

+0

Ihre Base64-Zeichenfolge scheint unvollständig zu sein. => https://www.base64decode.org gibt einen unvollständigen HTML-Code zurück. Andere Decoder stürzen ab und geben nichts zurück. –

+0

Ihre Base64-Zeichenfolge ist fehlerhaft. – Nkosi

Antwort

3

Wie wäre es

string input = "PGltZyBzcmM9Imh0dHA6Ly9jY3Byb21haWwuY29tOjgxODEvYWRtaW1wLmpzcD9pZD1UaUUtbldrcGhESUJuaHNUS2t0NENpclQzTHVvY09ZOVV2czJDb1lFbGo4YjZJWjl0TWp6SzNvRUpERkVHZnBnIiBib3JkZXI9IjAiIGhlaWdodD0iMCIgd2lkdGg9IjAiPjxkaXYgc3R5bGU9IndpZHRoOjYwMHB4OyAgZm9udC1mYW1pbHk6QXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxOHB4OyBsaW5lLWhlaWdodDoyMnB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4gIDxmb250IHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsgZm9udC1zaXplOiAyMHB4OyBjb2xvcjogcmVkOyI-IEdST1cgWU9VUiBPV04gSEFJUiBGT1IgSlVTVCAxIFJTLjwvZm9udD4gIDxicj4gIDxicj4gIDxmb250IHN0eWxlPSJjb2xvcjpncmVlbjtmb250LXdlaWdodDogYm9sZDsiPkludGVyZXN0IEZyZWUgRU1JPGJyPjxicj4xIFJzLiBEb3duIFBheW1lbnQ8L2ZvbnQ-ICA8YnI-ICA8YnI-ICA8YSBocmVmPSJodHRwOi8vY2Nwcm9tYWlsLmNvbTo4MTgxL3RyYWNrLmpzcD9pZD1UaUUtbldrcGhESUJuaHNUS2t0NENpclQzTHVvY09ZOVV2czJDb1lFbGo4YjZJWjl0TWp6SzNvRUpERkVHZnBnIiBzdHlsZT0iY29sb3I6IGJsdWU7IGJhY2tncm91bmQtY29sb3I6IHllbGxvdzsiPkdldCBZb3VyIEFwcG9pbnRtZW50IE5vdzwvYT4gIDxicj4gIDxicj4gPC9kaXY-PGJyLz48ZGl2IHN0eWxlPSJmb250LXNpemU6OXB4O3dpZHRoOjYwMHB4O21hcmdpbi1sZWZ0OiAxNTBweDsiPjxhIGhyZWY9Imh0dHA6Ly9jY3Byb21haWwuY29tOjgxODEvdHJhY2suanNwP2lkPVRpRS1uV2twaERJQm5oc1RLa3Q0Q2lyVDNMdW9jT1k5VXZzMkNvWUVsajhiNklaOXRNanpLM29FSkRGRUdmcGcmdT1hIj5DbGljayBIZXJlPC9hPiB0byB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbmV3c2xldHRlci48YnIvPjwvZGl2Pg0K"; 
string result = System.Text.Encoding.Default.GetString(System.Convert.FromBase64String(input.Replace("-", "+").Replace("_", "/"))); 

ich Ihre Ersatz gehalten, weil - und _ sind ungültige Zeichen für BASE64

1

Ihr Versuch zu dekodieren sieht aus wie Sie eine Base64 URL codierte Zeichenfolge zu entschlüsseln versuchen.

public byte[] Decode(string text) { 
    var output = text; 
    output = output.Replace('-', '+'); // 62nd char of encoding 
    output = output.Replace('_', '/'); // 63rd char of encoding 
    switch (output.Length % 4) { // Pad with trailing '='s 
     case 0: break; // No pad chars in this case 
     case 2: output += "=="; break; // Two pad chars 
     case 3: output += "="; break; // One pad char 
     default: throw new FormatException("invalid format", text)); 
    } 
    var converted = Convert.FromBase64String(output); // Standard base64 decoder 
    return converted; 
} 

Mit dem obigen Code können Sie tun

string raw = "PGltZyBzcmM9Imh0dHA6Ly9jY3Byb21haWwuY29tOjgxODEvYWRtaW1wLmpzcD9pZD1UaUUtbldrcGhESUJuaHNUS2t0NENpclQzTHVvY09ZOVV2czJDb1lFbGo4YjZJWjl0TWp6SzNvRUpERkVHZnBnIiBib3JkZXI9IjAiIGhlaWdodD0iMCIgd2lkdGg9IjAiPjxkaXYgc3R5bGU9IndpZHRoOjYwMHB4OyAgZm9udC1mYW1pbHk6QXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxOHB4OyBsaW5lLWhlaWdodDoyMnB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4gIDxmb250IHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsgZm9udC1zaXplOiAyMHB4OyBjb2xvcjogcmVkOyI-IEdST1cgWU9VUiBPV04gSEFJUiBGT1IgSlVTVCAxIFJTLjwvZm9udD4gIDxicj4gIDxicj4gIDxmb250IHN0eWxlPSJjb2xvcjpncmVlbjtmb250LXdlaWdodDogYm9sZDsiPkludGVyZXN0IEZyZWUgRU1JPGJyPjxicj4xIFJzLiBEb3duIFBheW1lbnQ8L2ZvbnQ-ICA8YnI-ICA8YnI-ICA8YSBocmVmPSJodHRwOi8vY2Nwcm9tYWlsLmNvbTo4MTgxL3RyYWNrLmpzcD9pZD1UaUUtbldrcGhESUJuaHNUS2t0NENpclQzTHVvY09ZOVV2czJDb1lFbGo4YjZJWjl0TWp6SzNvRUpERkVHZnBnIiBzdHlsZT0iY29sb3I6IGJsdWU7IGJhY2tncm91bmQtY29sb3I6IHllbGxvdzsiPkdldCBZb3VyIEFwcG9pbnRtZW50IE5vdzwvYT4gIDxicj4gIDxicj4gPC9kaXY-PGJyLz48ZGl2IHN0eWxlPSJmb250LXNpemU6OXB4O3dpZHRoOjYwMHB4O21hcmdpbi1sZWZ0OiAxNTBweDsiPjxhIGhyZWY9Imh0dHA6Ly9jY3Byb21haWwuY29tOjgxODEvdHJhY2suanNwP2lkPVRpRS1uV2twaERJQm5oc1RLa3Q0Q2lyVDNMdW9jT1k5VXZzMkNvWUVsajhiNklaOXRNanpLM29FSkRGRUdmcGcmdT1hIj5DbGljayBIZXJlPC9hPiB0byB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbmV3c2xldHRlci48YnIvPjwvZGl2Pg0K"; 
byte[] data = Decode(raw); 
string body = Encoding.UTF8.GetString(data); 

die

HTML-Ausgabe produziert
<img src="http://ccpromail.com:8181/admimp.jsp?id=TiE-nWkphDIBnhsTKkt4CirT3LuocOY9Uvs2CoYElj8b6IZ9tMjzK3oEJDFEGfpg" border="0" height="0" width="0"><div style="width:600px; font-family:Arial, Helvetica, sans-serif; font-size: 18px; line-height:22px; text-align: center;"> <font style="font-weight: bold; font-size: 20px; color: red;"> GROW YOUR OWN HAIR FOR JUST 1 RS.</font> <br> <br> <font style="color:green;font-weight: bold;">Interest Free EMI<br><br>1 Rs. Down Payment</font> <br> <br> <a href="http://ccpromail.com:8181/track.jsp?id=TiE-nWkphDIBnhsTKkt4CirT3LuocOY9Uvs2CoYElj8b6IZ9tMjzK3oEJDFEGfpg" style="color: blue; background-color: yellow;">Get Your Appointment Now</a> <br> <br> </div><br/><div style="font-size:9px;width:600px;margin-left: 150px;"><a href="http://ccpromail.com:8181/track.jsp?id=TiE-nWkphDIBnhsTKkt4CirT3LuocOY9Uvs2CoYElj8b6IZ9tMjzK3oEJDFEGfpg&u=a">Click Here</a> to unsubscribe from this newsletter.<br/></div> 

URL Anwendungen

Base64-Codierung kann hilfreich sein, wenn ziemlich lange Identifizierung information n wird in einer HTTP-Umgebung verwendet. Beispielsweise könnte eine Datenbank Persistenz-Framework für Java-Objekte Base64-Codierung zu eine relativ große eindeutige ID (in der Regel 128-Bit-UUIDs) in eine Zeichenfolge für die Verwendung als HTTP-Parameter in HTTP-Formularen oder HTTP-GET-URLs codieren. Auch viele Anwendungen müssen Binärdaten in einer Weise kodieren, die bequem für die Aufnahme in URLs ist, einschließlich in versteckten Webformular Felder, und Base64 ist eine bequeme Codierung, um sie kompakt zu machen.

Standard Base64 in URL erfordert Codierung von '+', '/' und '=' Zeichen in spezielle Prozent codierten hexadezimalen Sequenzen ('+' wird '% 2B', '/' wird zu ‚% 2F 'und' = 'wird zu'% 3D '), wodurch die Zeichenfolge unnötig länger wird.

Aus diesem Grunde modifizierte Base64 für URL-Varianten existieren, wo die ‚+‘ und ‚/‘ Zeichen von Standard-Base64 jeweils durch ersetzt werden ‚-‘ und ‚_‘, so dass URL-Encoder/Decoder verwendet, ist nicht mehr notwendig und haben keinen Einfluss auf die Länge des codierten Wertes, so dass die gleichen codierten Form intakt für die Verwendung in relationalen Datenbanken, Web Forms, und Objektkennungen im Allgemeinen. Einige Varianten erlauben oder erfordern das Weglassen der Auffüllzeichen '=', um zu vermeiden, dass sie mit den Trennzeichen des Feldes verwechselt werden, oder erfordern, dass ein solches Auffüllen prozentual codiert wird. Einige Bibliotheken (wie org.bouncycastle.util.encoders.UrlBase64Encoder) werden encode '=' zu '.'.

Referenz Base64 : From Wikipedia

1

Sie machen Fehler im Code: Sie wieder raw zu ersetzen nehmen statt codebody

codedbody = raw.Replace("_", "/"); 

Sollte sein:

codedbody = codedbody.Replace("_", "/"); 
Verwandte Themen