Base64 en C# : comment coder et décoder des chaînes sans prise de tête
\n\nAvez-vous déjà été confronté à une situation où vous deviez transmettre des données binaires via un protocole textuel, envoyer une image en JSON ou enregistrer un hachage sous une forme lisible ? C'est là qu'intervient le Base64 — un format ancien, fiable et éprouvé qui transforme n'importe quels octets en texte sécurisé.
\n\nLa question "How do I encode and decode a base64 string?" est l'une des plus populaires sur Stack Overflow (des dizaines de milliers de vues). Et ce n'est pas pour rien : en C#, le travail avec Base64 semble simple, mais les pièges sont nombreux. Aujourd'hui, nous allons tout détailler de A à Z : des exemples de base aux cas réels en production.
\n\nQu'est-ce que le Base64 et pourquoi en a-t-on besoin ?
\n\nLe Base64 est une méthode de représentation de données binaires (octets) sous forme de chaîne ASCII. L'alphabet se compose de 64 caractères : A-Z, a-z, 0-9, plus les symboles '+' et '/'. Un caractère '=' est souvent ajouté à la fin de la chaîne pour l'alignement.
\n\nOù est-il utilisé :
\n- \n
- Transmission de données en JSON/XML — les données binaires ne peuvent pas être insérées directement, uniquement sous forme de chaîne \n
- Authentification — Basic Auth utilise Base64 pour coder le nom d'utilisateur et le mot de passe \n
- Stockage d'images en base de données — les petites images sont stockées directement dans la base sous forme Base64 \n
- Pièces jointes d'email — le format MIME nécessite Base64 pour les fichiers binaires \n
En C#, c'est la classe System.Convert qui gère tout cela — votre outil principal pour travailler avec Base64.
Comment coder une chaîne en Base64 sur C#
\n\nLe scénario le plus courant : vous avez une chaîne ordinaire (par exemple, "Bonjour, le monde !"), et vous souhaitez obtenir sa représentation Base64.
Voici comment faire :
\n\nusing System;\nusing System.Text;\n\nstring original = "Hello, World!";\nbyte[] bytes = Encoding.UTF8.GetBytes(original);\nstring base64 = Convert.ToBase64String(bytes);\n\nConsole.WriteLine(base64); // Sortie : SGVsbG8sIFdvcmxkIQ==\n\nPoint important : Base64 fonctionne avec des octets, pas avec des chaînes. Nous convertissons donc d'abord la chaîne en tableau d'octets (en utilisant l'encodage UTF-8), puis nous encodons ces octets.
\n\nPourquoi UTF-8 et pas, disons, ASCII ? Parce que UTF-8 prend en charge tous les caractères Unicode, y compris le cyrillique, les idéogrammes et les emojis. Si vous utilisez ASCII pour des chaînes russes, les données seront perdues.
\n\nComment décoder une chaîne Base64 en chaîne normale
\n\nLe processus inverse — le décodage — est symétrique :
\n\nusing System;\nusing System.Text;\n\nstring base64 = "SGVsbG8sIFdvcmxkIQ==";\nbyte[] bytes = Convert.FromBase64String(base64);\nstring decoded = Encoding.UTF8.GetString(bytes);\n\nConsole.WriteLine(decoded); // Sortie : Hello, World!\n\nNotez : si vous avez encodé la chaîne en UTF-8, vous devez également la décoder en UTF-8. Sinon, vous obtiendrez du charabia.
\n\nTravail avec des données binaires (images, fichiers)
\n\nBase64 ne se limite pas aux chaînes. Vous pouvez encoder n'importe quelles données binaires — par exemple, une image ou un PDF.
\n\nExemple : encoder un tableau d'octets en Base64
\n\nbyte[] imageBytes = File.ReadAllBytes("photo.jpg");\nstring base64Image = Convert.ToBase64String(imageBytes);\n\n// Vous pouvez maintenant enregistrer la chaîne en JSON ou l'envoyer via une API\nConsole.WriteLine($"Longueur de la chaîne Base64 : {base64Image.Length} caractères");\n\nDécoder en fichier :
\n\nstring base64Image = "..."; // votre chaîne\nbyte[] imageBytes = Convert.FromBase64String(base64Image);\nFile.WriteAllBytes("decoded_photo.jpg", imageBytes);\n\nImportant : Base64 augmente la taille des données d'environ 33 %. Si vous avez une image de 1 Mo, après encodage, elle pèsera ~1,33 Mo sous forme de chaîne.
\n\nErreurs typiques et comment les éviter
\n\nMême les développeurs expérimentés trébuchent parfois sur Base64. Voici les pièges les plus courants :
\n\n