🔐

FAQ Encodeur / Décodeur Base64

Q: Qu'est-ce que l'encodage Base64 et à quoi sert-il ?

R: Base64 est un schéma d'encodage binaire-texte qui convertit des données binaires en une chaîne de caractères ASCII à l'aide de 64 caractères (A-Z, a-z, 0-9, +, /). Il est principalement utilisé pour transmettre des données binaires sur des protocoles basés sur le texte comme HTTP, SMTP, ou dans des charges utiles JSON. Les applications courantes incluent les pièces jointes des e-mails via MIME, l'intégration d'images dans du HTML et du CSS sous forme d'URL de données, l'encodage de charges utiles dans les JSON Web Tokens (JWT), et le stockage de données binaires dans des colonnes de base de données basées sur le texte.

Q: L'encodage Base64 est-il un chiffrement ? Est-il sécurisé ?

R: Non. Base64 est un schéma d'encodage, pas un chiffrement. Toute personne disposant d'une chaîne encodée en Base64 peut la décoder pour retrouver les données d'origine instantanément, sans avoir besoin d'une clé, d'un mot de passe ou d'un secret. Il n'offre ni confidentialité, ni intégrité, ni authentification. Considérez-le comme un moyen de représenter les mêmes données dans un format différent — comme traduire l'anglais en code Morse. Si vous devez protéger des données sensibles, utilisez d'abord un algorithme de chiffrement approprié (comme AES), puis éventuellement encodez les octets chiffrés avec Base64 pour le transport.

Q: Pourquoi Base64 se termine-t-il parfois par des signes = ou == ?

R: Le caractère = est un caractère de rembourrage (padding). Base64 traite les données d'entrée par groupes de 3 octets (24 bits), produisant 4 caractères Base64 par groupe. Lorsque la longueur de l'entrée n'est pas un multiple de 3 octets, l'encodage ajoute des caractères de rembourrage = pour que la sortie soit un multiple de 4 caractères. Un = est ajouté lorsqu'il reste 2 octets, et deux caractères = sont ajoutés lorsqu'il ne reste qu'un seul octet. Par exemple, « Man » (3 octets) s'encode en « TWFu » sans rembourrage, mais « Ma » (2 octets) s'encode en « TWE= » et « M » (1 octet) s'encode en « TQ== ».

Q: L'encodage Base64 rend-il les données plus volumineuses ? Quel est le surcoût ajouté ?

R: Oui, l'encodage Base64 augmente la taille des données d'environ 33 %. Pour chaque groupe de 3 octets de données binaires en entrée, la sortie est de 4 octets, plus un éventuel rembourrage. Ainsi, un fichier binaire de 3 Mo devient environ 4 Mo une fois encodé en Base64. C'est le compromis nécessaire pour pouvoir transmettre des données binaires sur des canaux textuels uniquement. Par rapport à d'autres encodages binaire-texte, Base64 est relativement efficace — l'encodage hexadécimal, par exemple, ajoute un surcoût de 100 %.

Q: Quelle est la différence entre le Base64 standard et le Base64url ?

R: Le Base64 standard utilise + et / dans son alphabet et = pour le rembourrage. Le Base64url (Base64 adapté aux URL) remplace + par - et / par _, et omet généralement le rembourrage. Cela rend le Base64url sûr pour une utilisation dans les URL, les paramètres de requête et les noms de fichiers sans encodage de pourcentage supplémentaire. Le Base64url est défini dans la RFC 4648 et est largement utilisé dans les JSON Web Tokens (JWT), les jetons OAuth et les API web. Par exemple, une chaîne Base64 standard comme Pj4+Pz8/Pw== devient Pj4-Pz8_Pw en Base64url.

Q: Qu'est-ce qu'une URL de données Base64 et comment est-elle utilisée dans le HTML et le CSS ?

R: Une URL de données est un schéma d'URI qui intègre les données directement dans un document web. Pour les images, le format est data:image/png;base64,iVBORw0KGgo.... Elle peut être utilisée à la place d'une URL de fichier dans les balises HTML <img> et les propriétés CSS background-image. Les URL de données éliminent la nécessité d'une requête HTTP distincte pour charger l'image, ce qui peut améliorer les performances pour les petits éléments (généralement moins de 10 Ko). Cependant, elles augmentent la taille des fichiers HTML/CSS d'environ 33 % et empêchent le navigateur de mettre l'image en cache indépendamment.

Q: Peut-on convertir n'importe quel fichier en Base64 ?

R: Oui — toute donnée binaire, qu'il s'agisse de texte, d'une image, d'un fichier audio, vidéo, d'un PDF ou d'une archive compressée, peut être encodée en Base64. Le processus est le même : lisez les octets bruts du fichier et appliquez l'algorithme d'encodage Base64. Lorsque vous décodez la chaîne Base64, vous retrouvez exactement les octets d'origine. C'est ainsi que fonctionnent les pièces jointes des e-mails — le fichier binaire est encodé en Base64 avant d'être envoyé via SMTP, puis décodé pour retrouver le fichier d'origine côté réception.

Q: Comment gérer les caractères Unicode (comme les emojis ou le texte chinois) lors de l'encodage en Base64 en JavaScript ?

R: La fonction intégrée btoa() ne fonctionne qu'avec les caractères Latin-1 (caractères sur un seul octet). Pour les chaînes Unicode contenant des emojis, des caractères chinois ou d'autres caractères multi-octets, vous devez d'abord convertir la chaîne en octets à l'aide de l'API TextEncoder :

function unicodeToBase64(str) {
  const bytes = new TextEncoder().encode(str);
  const binaryString = String.fromCharCode(...bytes);
  return btoa(binaryString);
}

function base64ToUnicode(base64) {
  const binaryString = atob(base64);
  const bytes = Uint8Array.from(binaryString, c => c.charCodeAt(0));
  return new TextDecoder().decode(bytes);
}

Dans Node.js, la classe Buffer gère l'Unicode nativement : Buffer.from('Hello 你好 🚀').toString('base64') fonctionne sans aucun traitement particulier.

FAQ Encodeur / Décodeur Base64 - CoolTool