Dans le même ordre d'idées, voici un convertisseur de base arbitraire que j'ai créé pour vous. Bonne lecture ! https://convert.zamicol.com/
Qu'est-ce qu'un caractère de remplissage ?
Les caractères de remplissage permettent de satisfaire aux exigences de longueur et n'ont pas d'autre signification.
Décimale Exemple de remplissage : Compte tenu de l'exigence arbitraire selon laquelle toutes les chaînes de caractères 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 puisqu'ils n'ont pas de signification, "00000640".
Encodage binaire
Le paradigme de l'octet : Pour l'encodage, l'octet est l'unité de mesure standard de facto et tout système doit se référer aux octets.
Base256 s'inscrit exactement dans le paradigme de l'octet. Un octet est égal à un caractère en base256.
Base16 Le format hexadécimal, ou hex, utilise 4 bits pour chaque caractère. Un octet peut représenter deux caractères en base16.
Base64 ne s'inscrit pas uniformément dans le paradigme de l'octet (pas plus que la base32), contrairement à la base256 et à la base16. Tous les caractères de base64 peuvent être représentés sur 6 bits, soit 2 bits de moins qu'un octet complet.
Nous pouvons représenter l'encodage base64 par rapport au paradigme de l'octet sous la forme d'une fraction : 6 bits par caractère plus de 8 bits par octet . Réduite, cette fraction est de 3 octets sur 4 caractères.
Ce ratio, 3 octets pour 4 caractères base64, est la règle à suivre lors de l'encodage base64. L'encodage Base64 ne peut promettre une mesure égale qu'avec des paquets de 3 octets, contrairement à la base16 et à la base256 où chaque octet est indépendant.
Donc pourquoi Le remplissage est-il encouragé alors que l'encodage pourrait très bien fonctionner 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 espaces supplémentaires doivent être vides et éliminent toute ambiguïté. Même si la longueur est inconnue, vous saurez où se termine votre flux de données.
À titre de contre-exemple, certaines normes telles que 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 les hypothèses sur la longueur ne soient pas faites, le remplissage n'est pas nécessaire car s'il y a quelque chose d'incorrect, cela ne fonctionnera tout simplement pas.
Et c'est exactement ce que la base64 Le RFC dit,
Dans certaines circonstances, l'utilisation du remplissage ("=") dans les données codées en base n'est pas nécessaire ou n'est pas utilisée. Dans le cas général, lorsqu'il n'est pas possible de faire des hypothèses sur la taille des données transportées ne peut être supposée, le remplissage est nécessaire pour pour obtenir des données décodées correctes.
[...]
Le pas de remplissage en base 64 [...] s'il est incorrectement mal implémentée, conduit à des altérations non significatives des données encodées. Par exemple, si l'entrée n'est que d'un octet pour un codage en base 64, tous les six bits du premier symbole sont utilisés, mais seulement les deux premiers deux premiers bits du symbole suivant. Ces bits de remplissage DOIVENT être mis à zéro par les codeurs conformes, ce qui est décrit dans les descriptions sur le remplissage ci-dessous. Si cette propriété n'est pas respectée, 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. peuvent être décodées dans les mêmes données binaires. Si cette (et d'autres discutées dans ce document), un codage canonique est garanti. est garanti.
Le padding nous permet de décoder l'encodage base64 avec la promesse de ne pas perdre de bits. Sans padding, il n'y a plus de reconnaissance explicite de la mesure en paquets de trois octets. Sans padding, il se peut que vous ne puissiez pas garantir la reproduction exacte de l'encodage original sans informations supplémentaires provenant généralement d'un autre endroit de votre pile, comme TCP, les sommes de contrôle ou d'autres méthodes.
L'alternative aux systèmes de conversion par seau comme base64 est la suivante conversion des radix qui n'a pas de taille de godet arbitraire et qui, pour les lecteurs de gauche à droite, est rembourré à gauche. Les "division itérative par radix". est généralement utilisée pour les conversions de radix.
Exemples
Voici l'exemple du formulaire RFC 4648 ( https://www.rfc-editor.org/rfc/rfc4648#section-8 )
Chaque caractère à l'intérieur de la fonction "BASE64" utilise un octet (base256). Nous le traduisons ensuite 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