Ich möchte base64-Daten codieren, um sie in eine URL einzufügen, und sie dann in meinem HttpHandler dekodieren.
Ich habe festgestellt, dass die Base64-Codierung ein '/' Zeichen zulässt, das meinen UriTemplate-Abgleich durcheinander bringt. Dann fand ich heraus, dass es ein Konzept einer "modifizierten Base64 für URL" von Wikipedia gibt:
Es gibt eine modifizierte Base64 für URL-Variante, bei der kein Auffüllen '=' verwendet wird und die Zeichen '+' und '/' von Standard Base64 jeweils durch '-' und '_' ersetzt werden, sodass URL-Encoder / -Decoder verwendet werden ist nicht mehr erforderlich und hat keinen Einfluss auf die Länge des codierten Werts, sodass dasselbe codierte Formular für die Verwendung in relationalen Datenbanken, Webformularen und Objektkennungen im Allgemeinen intakt bleibt.
Verwenden von .NET Ich möchte meinen aktuellen Code von der grundlegenden Base64-Codierung und -Decodierung zur Verwendung der Methode "Modified Base64 for URL" ändern. Hat jemand das getan?
Zum Entschlüsseln weiß ich, dass es mit etwas beginnt wie:
string base64EncodedText = base64UrlEncodedText.Replace('-', '+').Replace('_', '/');
// Append '=' char(s) if necessary - how best to do this?
// My normal base64 decoding now uses encodedText
Aber ich muss möglicherweise ein oder zwei '=' Zeichen am Ende hinzufügen, was etwas komplexer aussieht.
Meine Codierungslogik sollte etwas einfacher sein:
// Perform normal base64 encoding
byte[] encodedBytes = Encoding.UTF8.GetBytes(unencodedText);
string base64EncodedText = Convert.ToBase64String(encodedBytes);
// Apply URL variant
string base64UrlEncodedText = base64EncodedText.Replace("=", String.Empty).Replace('+', '-').Replace('/', '_');
Ich habe die Guid to Base64 für den URL StackOverflow-Eintrag gesehen, aber diese hat eine bekannte Länge und daher können sie die Anzahl der am Ende benötigten Gleichheitszeichen fest codieren.
Antworten:
Dies sollte es richtig ausfüllen: -
quelle
Überprüfen Sie auch die Klasse HttpServerUtility mit den Methoden UrlTokenEncode und UrlTokenDecode, die die URL-sichere Base64-Codierung und -Decodierung verarbeiten.
Hinweis 1: Das Ergebnis ist keine gültige Base64-Zeichenfolge. Einige unsichere Zeichen für die URL werden ersetzt.
Hinweis 2: Das Ergebnis unterscheidet sich vom base64url-Algorithmus in RFC4648.
quelle
UrlTokenEncode
nicht ausschließlich base64url ist , da es die Auffüllung '=' durch '0', '1' oder '2' ersetzt, je nachdem, wie viele Gleichheitszeichen es ersetzt hat.Nicht genug Punkte zum Kommentieren, aber falls es hilft, funktioniert das Code-Snippet, das Sushil in dem bereitgestellten Link gefunden hat (JSON Web Signature ietf-Entwurf), für die Codierung von Base 64 als Parameter in der URL.
Kopierter Ausschnitt unten für diejenigen, die faul sind:
quelle
Ich habe hier auf der Suche nach Code zum Codieren / Decodieren für die base64url-Codierung getroffen, der sich kaum von der in der Frage erläuterten base64 unterscheidet.
C # -Code-Snippet in diesem Dokument gefunden. JSON Web Signature ietf Entwurf
quelle
Im Vergleich zur akzeptierten Antwort würden Sie eine base64-codierte URL mit C # grundlegend dekodieren :
Dekodieren:
quelle