Les mêmes octets, des alphabets différents

Le Base64 standard du RFC 4648 utilise + et / pour les valeurs 62 et 63 ; Base64url utilise - et _. Le texte ??? donne Pz8/ au format standard et Pz8_ au format URL. >>> donne Pj4+ et Pj4-. L’outil Base64 de texte de Moyoutil restitue les chaînes standard, mais rejette celles contenant - ou _ avec une erreur de format. Le code Node.js ci-dessous reproduit séparément les deux formats.

for (const text of ["???", ">>>"]) {
  const bytes = Buffer.from(text, "utf8");
  console.log(bytes.toString("base64"),
              bytes.toString("base64url"));
}
// Pz8/ Pz8_
// Pj4+ Pj4-
Caractères Base64 et Base64url pour les valeurs 62 et 63, avec deux exemples de texte
Schéma original comparant les alphabets. Les lignes du bas montrent les encodages réels d’entrées fictives.

RFC 4648 §5: Base64url alphabet

Ne pas déduire le format de son seul aspect

foo donne Zm9v dans les deux formats. L’absence de +, /, - et _ ne prouve pas qu’une chaîne soit du Base64 standard. Consultez la spécification du système qui l’a produite. Le remplissage est une règle distincte : RFC 4648 l’exige sauf indication contraire de la spécification qui le référence ; RFC 7515 définit Base64url pour JWS sans les = finaux. Par exemple, f donne Zg== au format standard et Zg au format URL sans remplissage.

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 ne convertit pas automatiquement Base64url et ne vérifie pas les signatures JWS. Ce code compare les formats. Obtenir un texte lisible ne prouve pas la validité d’une signature. L’entrée de signature JWS contient l’en-tête et la charge utile encodés d’origine ; ne remplacez pas l’entrée de vérification par une version réencodée.

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

Questions fréquemment posées

Puis-je supprimer - et _ pour décoder ?

Ne les supprimez pas. Ces caractères représentent les valeurs de données 62 et 63. Les retirer peut modifier les données d’origine. Si vous avez besoin du Base64 standard accepté par cet outil, exportez ce format depuis le système d’origine.