web-dev-qa-db-fra.com

Pourquoi une chaîne encodée en base64 a-t-elle un signe = à la fin

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:

  1. Une chaîne base64 se termine-t-elle toujours par =?
  2. Pourquoi un = est-il ajouté à la fin?
275
santosh singh

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.

242
Andrew Hare

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)

223
Badr Bellaj

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.

64
Legolas
  1. Non.
  2. Pour compléter la chaîne codée en Base64 à un multiple de 4 caractères, afin qu'elle puisse être décodée correctement.
15
Ian Kemp

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.

14
iandotkelly

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.

11
Sam Holloway

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.

8
Thomas Leonard

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.

7
Dev