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.