Ich möchte eine sichere Base64-URL-Codierung in C # erreichen. In Java haben wir die gemeinsame Codec
Bibliothek, die mir eine URL-sicher codierte Zeichenfolge gibt. Wie kann ich mit C # dasselbe erreichen?
byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes("StringToEncode");
string returnValue = System.Convert.ToBase64String(toEncodeAsBytes);
Der obige Code konvertiert es in Base64, aber es wird aufgefüllt ==
. Gibt es eine Möglichkeit, eine URL-sichere Codierung zu erreichen?
Url.Encode
auf String in verwendenBASE64
?System.Web
Assembly verweisen .url safe
?%3D
ist url sicher.Antworten:
Es ist üblich, das Alphabet einfach gegen URLs auszutauschen, sodass keine% -Codierung erforderlich ist. nur 3 der 65 Zeichen sind problematisch -
+
,/
und=
. Die häufigsten Ersetzungen sind-
anstelle von+
und_
anstelle von/
. Was die Polsterung betrifft: entfernen Sie sie einfach (die=
); Sie können den erforderlichen Polsterungsgrad ableiten . Am anderen Ende: einfach den Vorgang umkehren:mit:
und umzukehren:
Die interessante Frage ist jedoch: Ist dies der gleiche Ansatz, den die "Common Codec Library" verwendet? Es wäre sicherlich eine vernünftige erste Sache zu testen - dies ist ein ziemlich häufiger Ansatz.
quelle
==
Auffüllung, 2x8 wird als 3x6 mit=
Auffüllung codiert, 3x8 wird als 4x6 ohne Auffüllung codiert und dann so ausgerichtet, dass es sich wiederholt. Nichts wird jemals auf 1x6 Bit codiert, sodass Sie niemals eine===
Auffüllung benötigen .Sie können eine Klasse
Base64UrlEncoder
aus dem Namespace verwendenMicrosoft.IdentityModel.Tokens
.quelle
Eine andere Option, wenn Sie ASP.NET Core verwenden, ist die Verwendung
Microsoft.AspNetCore.WebUtilities.WebEncoders.Base64UrlEncode
.Wenn Sie ASP.NET Core nicht verwenden, ist die
WebEncoders
Quelle unter der Apache 2.0-Lizenz verfügbar .quelle
Basierend auf den Antworten hier mit einigen Leistungsverbesserungen haben wir eine sehr einfach zu verwendende url-sichere base64-Implementierung für NuGet mit dem auf GitHub verfügbaren Quellcode (MIT-lizenziert) veröffentlicht.
Die Bedienung ist so einfach wie
quelle
"string".Replace
dieencode
Methode entschieden, aber eine Schleife mit manuellen ersetzt diedecode
?Verwenden Sie
System.Web.HttpServerUtility.UrlTokenEncode(bytes)
zum Codieren undSystem.Web.HttpServerUtility.UrlTokenDecode(bytes)
Decodieren eine URL-sichere base64-ähnliche Codierung, jedoch nicht "base64url" gemäß RFC4648 .quelle
Einfachste Lösung: (ohne Polsterung)
Gutschrift geht an: Tholle
quelle
Hier ist eine andere Methode zum Dekodieren einer URL-sicheren Base64, die auf die gleiche Weise mit Marc codiert wurde. Ich verstehe einfach nicht warum
4-length%4
funktioniert hat (es funktioniert).Wie folgt ist nur die Bitlänge des Ursprungs ein gemeinsames Vielfaches von 6 und 8. Base64 hängt nicht "=" an das Ergebnis an.
Umgekehrt können wir es also tun: Wenn die Bitlänge des Ergebnisses nicht durch 8 teilbar ist, wurde Folgendes angehängt:
quelle
Verwenden der kryptografischen Microsoft-Engine in UWP.
quelle
Karanvir Kangs Antwort ist gut und ich habe dafür gestimmt. Am Ende der Zeichenfolge bleibt jedoch ein ungerades Zeichen (das die Anzahl der entfernten Füllzeichen angibt). Hier ist meine Lösung.
quelle