Si un serveur a reçu une chaîne en base64 et voulait vérifier sa longueur avant la conversion, disons qu'il voulait toujours autoriser le tableau d'octets final à 16 Ko. Quelle peut être la taille d'un tableau d'octets de 16 Ko lorsqu'il est converti en une chaîne Base64 (en supposant un octet par caractère)?
168
ceil
desfloat
nombres ou simplement desint
nombres. (et nonceil
)De Wikipedia
Donc 16 ko * 4/3 donne très peu plus de 21,3 ko, soit 21848 octets, pour être exact.
J'espère que cela t'aides
la source
16 Ko correspond à 131 072 bits. Base64 emballe les tampons 24 bits en quatre caractères 6 bits chacun, vous auriez donc 5 462 * 4 = 21 848 octets.
la source
Puisque la question portait sur la pire augmentation possible, je dois ajouter qu'il y a généralement des sauts de ligne à environ 80 caractères. Cela signifie que si vous enregistrez des données encodées en base64 dans un fichier texte sous Windows, il ajoutera 2 octets, sous Linux 1 octet pour chaque ligne.
L'augmentation par rapport au codage réel a été décrite ci-dessus.
la source
C'est une future référence pour moi. Puisque la question porte sur le pire des cas, nous devons prendre en compte les sauts de ligne. Alors que la RFC 1421 définit la longueur de ligne maximale à 64 caractères, la RFC 2045 (MIME) stipule qu'il y aurait 76 caractères au plus sur une ligne.
Ce dernier est ce que la bibliothèque C # a implémenté. Donc, dans un environnement Windows où un saut de ligne est de 2 caractères (\ r \ n), nous obtenons ceci:
Length = Floor(Ceiling(N/3) * 4 * 78 / 76)
Remarque: Flooring est dû au fait que lors de mon test avec C #, si la dernière ligne se termine à exactement 76 caractères, aucun saut de ligne ne suit.
Je peux le prouver en exécutant le code suivant:
La réponse pour 16 Ko encodés en base64 avec 76 lignes de caractères: 22422 caractères
Supposons que ce soit le cas sous Linux,
Length = Floor(Ceiling(N/3) * 4 * 77 / 76)
mais je n'ai pas encore réussi à le tester sur mon noyau .NET.la source