2009-03-18 2 views
1

Das Füllzeichen für die offizielle base64 ist '=', das bei Verwendung in einer URL möglicherweise in Prozent kodiert sein muss. Ich versuche, das beste Padding-Zeichen zu finden, so dass meine codierte Zeichenkette sowohl URL-sicher sein kann (ich werde die codierte Zeichenkette als Parameterwert verwenden, wie id = codedString) UND Dateiname sicher (ich werde das codierte verwenden String direkt als Dateiname).Was ist das beste Padding-Zeichen für url-safe und filename-safe base64?

Dot ('.') Ist ein beliebter Kandidat, es ist url sicher, aber es ist nicht genau Dateiname sicher: Windows won't allow a file name which ends with a trailing dot.

'!' scheint eine machbare Wahl zu sein, obwohl ich gegoogelt habe und ich nie jemanden gesehen habe, der es als das Füllzeichen verwendet. Irgendwelche Ideen? Vielen Dank!

Update: Ich ersetzte "+" durch "-" (minus) und ersetzt "/" durch "_" (Unterstrich) in meiner angepassten base64-Codierung bereits, so dass '-' oder '_' nicht verfügbar ist für das Padding Char mehr.

Antwort

0

Ich würde mit '-' oder '_'
Sie sind URL und Datei sicher, und sie sieht mehr oder weniger wie padding

+0

Entschuldigung, ich hätte dies erwähnen sollen: Ich ersetzte "+" mit "-" (minus) und ersetzt "/" durch "_" (Unterstrich) in meiner angepassten base64-Codierung bereits, so dass "-" oder "_" nicht mehr für das Padding-Zeichen verfügbar ist. – SamS

2

Die RFC 2396 nicht reservierten Zeichen in URIs sind:

"-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")" 

Es ist jedoch erwähnenswert, dass der Microsoft-Artikel auch sagt: "Gehen Sie nicht von der Groß-/Kleinschreibung aus." Vielleicht solltest du einfach bei Base 16 oder 32 bleiben?

+0

würde ich vermeiden. ~ * '() für Dateinamen obwohl – cobbal

+0

Dank Miles, scheint wie'! ' ist gut für URL und Dateinamen. Vielleicht werde ich mit Base32 mit '!' als Füllzeichen. – SamS

1

Die Wikipedia Artikel-Staaten;

eine Variante Base64 für URL modifizierte vorhanden ist, wo keine Polsterung ‚=‘

verwendet werden
4

Die beste Lösung (Ich habe auf dieses Problem mit einer E-Mail zu senden Website im letzten Monat verbrachte Arbeits) ist nicht Padding-Zeichen (=) überhaupt zu verwenden

Der einzige Grund, warum Padding-Zeichen ist dort ist, weil "faul" Decoder. Sie können sehr einfach hinzufügen fehlende = -> tun Sie einfach% 4 auf Text und subtrahieren die Zahl, die Sie von 4 erhalten, und das ist, wie viel = Sie in String Ende hinzufügen müssen. Hier C# -Code ist:

var pad = 4 - (text.Length % 4); 
    if (pad < 4) 
     text = text.PadRight(text.Length + pad, '='); 

Außerdem sind die meisten Menschen, die dies tun, sind daran interessiert, + Ersatz und/mit anderen URL sicheren Charakter ... Ich schlage vor:

  • ersetzen - /ersetzen _

NICHT VERWENDEN. weil es verrückte Ergebnisse auf verschiedenen Systemen/Webservern produzieren kann (zum Beispiel auf IIS Base64 kodierte Zeichenfolge kann nicht enden. oder IIS wird nach der Datei suchen)

+1

Nicht ganz korrekt, das Ergebnis der Auffüllung ist nicht durch 4 teilbar.Sie müssen eine (4-pad) Anzahl von '=' Zeichen hinzufügen, nicht die Pad-Nummer. Ansonsten saubere Lösung. –

+0

@YoungBob Ich habe die Antwort bearbeitet, bitte bearbeiten Sie sie, wenn Sie besseren Code vorschlagen können. Vielen Dank! – kape123

Verwandte Themen