Je sais ce qu'est le codage base64
et comment calculer le codage base64
en C #, mais j'ai déjà constaté plusieurs fois que lorsque je convertis une chaîne en base64, il y a un =
à la fin.
Quelques questions se sont posées:
base64
se termine-t-elle toujours par =
?=
est-il ajouté à la fin?Il sert comme padding .
Une réponse plus complète est qu'une chaîne encodée en base64 ne se termine pas toujours par un =
, elle ne se terminera que par un ou deux =
s’ils sont requis pour compléter la chaîne à la bonne longueur.
1-non
2- En guise de réponse courte: le 65ème caractère (signe "=") est utilisé uniquement en complément du processus final de codage d'un message.
Vous n'aurez pas de signe '=' si votre chaîne comporte un nombre multiple de 3 caractères, car l'encodage _Base64
_ prend chacun trois octets (8bits) et les représente sous la forme quatre caractères imprimables dans la norme ASCII.
Détails :
(a) Si vous voulez encoder
ABCDEFG <=> [ABC
] [DEF
] [G
_Base64
_ traitera (produisant 4 caractères) avec le premier bloc et le second (car ils sont terminés) mais pour le troisième il ajoutera un double ==
dans la sortie dans afin de compléter les 4 caractères nécessaires.Ainsi, le résultat sera QUJDREVGRw == (sans espace)
(b) Si vous voulez encoder ...
ABCDEFGH <=> [ABC
] [DEF
] [GH
De la même façon, il n’ajoutera qu’un seul _=
_ à la fin de la sortie pour obtenir 4 caractères. Le résultat sera QUJDREVGR0g = (sans espace)
De Wikipedia :
La dernière séquence "==" indique que le dernier groupe ne contient qu'un octet et "=" qu'il contient deux octets.
Il s’agit donc d’une sorte de rembourrage.
Son défini dans RFC 2045 comme caractère de remplissage spécial si moins de 24 bits sont disponibles à la fin des données codées.
Le signe égal (=) est utilisé comme remplissage dans certaines formes d’encodage en base64. Le article Wikipedia sur la base64 a tous les détails.
C'est du rembourrage. De http://en.wikipedia.org/wiki/Base64 :
En théorie, le caractère de remplissage n'est pas nécessaire pour le décodage, car le nombre d'octets manquants peut être calculé à partir du nombre de chiffres Base64. Dans certaines implémentations, le caractère de remplissage est obligatoire, tandis que pour d'autres, il n'est pas utilisé. Un cas dans lequel des caractères de remplissage sont requis est la concaténation de plusieurs fichiers codés en Base64.
http://www.hcidata.info/base64.htm
Encodage "Marie avait" à la base 64
Dans cet exemple, nous utilisons une simple chaîne de texte ("Mary had"), mais le principe est valable, quelles que soient les données (fichier graphique, par exemple). Pour convertir chaque 24 bits de données d'entrée en 32 bits de sortie, le codage Base 64 divise les 24 bits en 4 morceaux de 6 bits. Le premier problème que nous remarquons est que "Mary had" n’est pas un multiple de 3 octets - il a une longueur de 8 octets. De ce fait, le dernier groupe de bits ne compte que 4 bits. Pour remédier à cela, nous ajoutons deux bits supplémentaires de "0" et nous nous en souvenons en mettant un "=" à la fin. Si la chaîne de texte à convertir en base 64 était longue de 7 octets, le dernier groupe aurait eu 2 bits. Dans ce cas, nous aurions ajouté quatre bits supplémentaires de "0" et nous nous en souviendrions en mettant "==" à la fin.