Dieselben Bytes, unterschiedliche Alphabete

Standard-Base64 nach RFC 4648 verwendet + und / für die Werte 62 und 63; Base64url verwendet - und _. Der Text ??? ergibt Pz8/ im Standardformat und Pz8_ im URL-Format. >>> ergibt Pj4+ und Pj4-. Das Base64-Textwerkzeug von Moyoutil stellt die Standardzeichenfolgen wieder her, weist Zeichenfolgen mit - oder _ aber mit einem Formatfehler zurück. Der folgende Node.js-Code reproduziert beide Formate unabhängig davon.

for (const text of ["???", ">>>"]) {
  const bytes = Buffer.from(text, "utf8");
  console.log(bytes.toString("base64"),
              bytes.toString("base64url"));
}
// Pz8/ Pz8_
// Pj4+ Pj4-
Base64- und Base64url-Zeichen für die Werte 62 und 63 mit zwei Textbeispielen
Selbst erstelltes Vergleichsdiagramm. Die unteren Zeilen zeigen tatsächliche Codierungen erfundener Eingaben.

RFC 4648 §5: Base64url alphabet

Das Format nicht allein am Aussehen erkennen

foo ergibt in beiden Formaten Zm9v. Das Fehlen von +, /, - und _ beweist kein Standard-Base64. Prüfen Sie die Formatspezifikation des erzeugenden Systems. Padding ist eine eigene Regel: RFC 4648 verlangt es, sofern die darauf verweisende Spezifikation nichts anderes festlegt; RFC 7515 definiert JWS-Base64url ohne abschließende =. Beispielsweise ergibt f im Standardformat Zg== und im ungepaddeten URL-Format Zg.

for (const text of ["foo", "f"]) {
  const bytes = Buffer.from(text, "utf8");
  console.log(bytes.toString("base64"),
              bytes.toString("base64url"));
}
// Zm9v Zm9v
// Zg== Zg

Moyoutil konvertiert Base64url nicht automatisch und prüft keine JWS-Signaturen. Dieser Code vergleicht Formate. Lesbarer Text belegt keine gültige Signatur. Die JWS-Signatureingabe enthält den ursprünglichen codierten Header und die Nutzdaten; ersetzen Sie die Eingabe zur Signaturprüfung nicht durch eine neu codierte Version.

RFC 7515 §2–3: Base64url and JWS signing input

Häufig gestellte Fragen

Kann ich - und _ zum Decodieren löschen?

Löschen Sie sie nicht. Sie sind Datenzeichen für die Werte 62 und 63. Ihr Entfernen kann die ursprünglichen Daten ändern. Wenn Sie das von diesem Werkzeug akzeptierte Standard-Base64 benötigen, exportieren Sie dieses Format im Ursprungssystem.