web-dev-qa-db-fra.com

Base64: Quelle est la pire augmentation possible de l'utilisation de l'espace?

Si un serveur reçoit une chaîne base64 et veut vérifier sa longueur avant la conversion, dites qu'il souhaite toujours autoriser le tableau d'octets final à 16 Ko. Quelle taille un tableau d'octets de 16 Ko pourrait-il éventuellement devenir lors de la conversion en chaîne Base64 (en supposant un octet par caractère)?

150
Bryan Field

Base64 code chaque ensemble de trois octets en quatre octets. De plus, la sortie est complétée pour être toujours un multiple de quatre.

Cela signifie que la taille de la représentation en base 64 d'une chaîne de taille n est la suivante:

ceil(n / 3) * 4

Ainsi, pour un tableau de 16 Ko, la représentation en base 64 sera ceil (16 * 1024/3) * 4 = 21848 octets de long ~ = 21,8 Ko.

Une approximation approximative consisterait à augmenter la taille des données à 4/3 de l'original.

220

De Wikipedia

Notez que pour une entrée de n octets, la sortie aura une longueur de (n + 2 - ((n + 2)% 3))/3 * 4 octets, de sorte que le nombre d'octets de sortie par octet d'entrée converge vers 4/3. ou 1,33333 pour le grand n.

Ainsi, 16 Ko * 4/3 donne très peu plus de 21,348 Ko, soit 21848 octets, pour être exact.

J'espère que cela t'aides

32
Binary Worrier

16 Ko correspond à 131 072 bits. Base64 regroupe des tampons de 24 bits en quatre caractères de 6 bits, ce qui donne 5 462 * 4 = 21 848 octets.

10
Chris Heald

Comme la question portait sur la pire augmentation possible, je dois ajouter qu’il existe généralement des sauts de ligne de 80 caractères environ. Cela signifie que si vous enregistrez des données encodées en base64 dans un fichier texte sous Windows, cela ajoute 2 octets, sous Linux, 1 octet pour chaque ligne.

L'augmentation par rapport au codage réel a été décrite ci-dessus.

5
Zsolt Sky