Je sais ce qu'est l' base64
encodage et comment calculer l' base64
encodage en C #, mais j'ai vu plusieurs fois que lorsque je convertis une chaîne en base64, il y en a un =
à la fin.
Quelques questions se sont posées:
- Une
base64
chaîne se termine- t-elle toujours par=
? - Pourquoi un
=
get est-il ajouté à la fin?
Réponses:
Il sert de rembourrage .
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 par un ou deux que=
si elles doivent remplir la chaîne à la bonne longueur.la source
=
suffirait. Si vous souhaitez retrouver les limites, un terminateur doit toujours être présent (et un seul caractère est toujours nécessaire). Tout le concept de rembourrage de Base64 n'est qu'un brainfart ...base64
efficacement le remplissage avec des illustrations et des exemples. Le lien actuel vers wikipedia n'est absolument pas pertinent comme @NH. mentionné.1-Non
2- En guise de réponse courte: le 65ème caractère (signe "=") n'est utilisé qu'en complément dans le processus final de codage d'un message.
Vous n'aurez pas de signe «=» si votre chaîne a un multiple de 3 caractères, car l'
Base64
encodage prend chacun trois octets (8 bits) et les représente comme 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) le premier bloc et le second (car ils sont complets) mais pour le troisième il ajoutera un double==
dans la sortie afin de compléter les 4 caractères nécessaires. Ainsi, le résultat sera QUJD REVG Rw == (sans espace)(b) Si vous voulez encoder ...
ABCDEFGH <=> [
ABC
] [DEF
] [GH
De même, il n'en ajoutera qu'un seul
=
à la fin de la sortie pour obtenir 4 caractères le résultat sera QUJD REVG R0g = (sans espace)la source
De Wikipédia :
Il s'agit donc d'une sorte de rembourrage.
la source
la source
=
à la fin et l' ai testé pour 1 million de cordes. Le décodage correspondait toujours.Il est défini dans la RFC 2045 comme un caractère de remplissage spécial si moins de 24 bits sont disponibles à la fin des données codées.
la source
Le signe égal (=) est utilisé comme remplissage dans certaines formes d'encodage base64. L' article Wikipedia sur base64 contient tous les détails.
la source
C'est du rembourrage. Depuis http://en.wikipedia.org/wiki/Base64 :
la source
decode(encode(A)+encode(B))=A+B
fonctionne avec un rembourrage mais pas sans.http://www.hcidata.info/base64.htm
Encodage de "Mary had" en 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 (par exemple, un fichier graphique). 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 fait 8 octets de long. Pour cette raison, le dernier groupe de bits ne fait que 4 bits de long. Pour y remédier, nous ajoutons deux bits supplémentaires de «0» et rappelons ce fait en mettant un «=» à la fin. Si la chaîne de texte à convertir en Base 64 avait une longueur 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.
la source