Sur une note connexe, voici un convertisseur de base pour la conversion de base arbitraire que j'ai créé pour vous. Prendre plaisir!
https://convert.zamicol.com/
Que sont les caractères de remplissage?
Les caractères de remplissage aident à satisfaire les exigences de longueur et n'ont aucune signification.
Exemple décimal de remplissage: étant
donné l'exigence arbitraire que toutes les chaînes doivent avoir une longueur de 8 caractères, le nombre 640 peut répondre à cette exigence en utilisant les 0 précédents comme caractères de remplissage car ils n'ont aucune signification, "00000640".
Encodage binaire
Le paradigme de l'octet: l'octet est l'unité de mesure standard de facto et tout schéma de codage doit se rapporter aux octets.
Base256 s'inscrit exactement dans ce paradigme. Un octet est égal à un caractère en base256.
Base16 , hexadécimal ou hexadécimal, utilise 4 bits pour chaque caractère. Un octet peut représenter deux caractères base16.
Base64 ne rentre pas uniformément dans le paradigme octet (pas plus que base32), contrairement à base256 et base16. Tous les caractères base64 peuvent être représentés en 6 bits, 2 bits à court d'un octet complet.
Nous pouvons représenter le codage base64 par rapport au paradigme octet sous forme de fraction: 6 bits par caractère sur 8 bits par octet . Cette fraction est réduite de 3 octets sur 4 caractères.
Ce ratio, 3 octets pour 4 caractères base64, est la règle que nous voulons suivre lors de l'encodage base64. L'encodage Base64 ne peut que promettre une mesure même avec des faisceaux de 3 octets, contrairement à base16 et base256 où chaque octet peut être autonome.
Alors pourquoi le remplissage est-il encouragé même si l'encodage pourrait fonctionner correctement sans les caractères de remplissage?
Si la longueur d'un flux est inconnue ou s'il peut être utile de savoir exactement quand un flux de données se termine, utilisez le remplissage. Les caractères de remplissage indiquent explicitement que ces points supplémentaires doivent être vides et excluent toute ambiguïté. Même si la longueur est inconnue avec le remplissage, vous saurez où se termine votre flux de données.
À titre d'exemple, certaines normes comme JOSE n'autorisent pas les caractères de remplissage. Dans ce cas, s'il manque quelque chose, une signature cryptographique ne fonctionnera pas ou d'autres caractères non base64 seront manquants (comme le "."). Bien que des hypothèses sur la longueur ne soient pas faites, le remplissage n'est pas nécessaire car s'il y a quelque chose qui ne va pas, cela ne fonctionnera tout simplement pas.
Et c'est exactement ce que dit la RFC base64 ,
Dans certaines circonstances, l'utilisation du remplissage ("=") dans les données codées en base n'est ni requise ni utilisée. Dans le cas général, lorsque des hypothèses sur la taille des données transportées ne peuvent être faites, un remplissage est nécessaire pour produire des données décodées correctes.
[...]
L'étape de remplissage en base 64 [...] si elle est mal implémentée, conduit à des altérations non significatives des données codées. Par exemple, si l'entrée n'est qu'un octet pour un codage en base 64, alors les six bits du premier symbole sont utilisés, mais seuls les deux premiers bits du symbole suivant sont utilisés. Ces bits de remplissage DOIVENT être mis à zéro par des codeurs conformes, ce qui est décrit dans les descriptions sur le remplissage ci-dessous. Si cette propriété ne tient pas, il n'y a pas de représentation canonique des données codées en base, et plusieurs chaînes codées en base peuvent être décodées en les mêmes données binaires. Si cette propriété (et d'autres discutées dans ce document) tient, un encodage canonique est garanti.
Le remplissage nous permet de décoder l'encodage base64 avec la promesse de ne pas perdre de bits. Sans remplissage, il n'y a plus d'acquittement explicite de la mesure dans des faisceaux de trois octets. Sans remplissage, vous ne pourrez peut-être pas garantir la reproduction exacte de l'encodage original sans informations supplémentaires généralement provenant d'un autre endroit de votre pile, comme TCP, des sommes de contrôle ou d'autres méthodes.
Exemples
Voici l'exemple de formulaire RFC 4648 ( http://tools.ietf.org/html/rfc4648#section-8 )
Chaque caractère à l'intérieur de la fonction "BASE64" utilise un octet (base256). Nous traduisons ensuite cela en base64.
BASE64("") = "" (No bytes used. 0%3=0.)
BASE64("f") = "Zg==" (One byte used. 1%3=1.)
BASE64("fo") = "Zm8=" (Two bytes. 2%3=2.)
BASE64("foo") = "Zm9v" (Three bytes. 3%3=0.)
BASE64("foob") = "Zm9vYg==" (Four bytes. 4%3=1.)
BASE64("fooba") = "Zm9vYmE=" (Five bytes. 5%3=2.)
BASE64("foobar") = "Zm9vYmFy" (Six bytes. 6%3=0.)
Voici un encodeur avec lequel vous pouvez jouer: http://www.motobit.com/util/base64-decoder-encoder.asp