Wenn ein Server eine base64-Zeichenfolge empfangen hat und vor der Konvertierung die Länge überprüfen wollte, sagen wir, er wollte immer zulassen, dass das endgültige Byte-Array 16 KB groß ist. Wie groß könnte ein 16-KB-Byte-Array möglicherweise werden, wenn es in eine Base64-Zeichenfolge konvertiert wird (unter der Annahme eines Bytes pro Zeichen)?
166
ceil
mitfloat
Zahlen oder nurint
Zahlen verwenden. (und neinceil
)Aus Wikipedia
16 kb * 4/3 ergeben also sehr wenig mehr als 21,3 'kb oder 21848 Bytes, um genau zu sein.
Hoffe das hilft
quelle
16 KB sind 131.072 Bit. Base64 packt 24-Bit-Puffer in vier 6-Bit-Zeichen pro Stück, sodass Sie 5.462 * 4 = 21.848 Bytes haben.
quelle
Da es sich um die schlechteste Erhöhung handelte, muss ich hinzufügen, dass es normalerweise Zeilenumbrüche bei jeweils 80 Zeichen gibt. Dies bedeutet, dass beim Speichern von Base64-codierten Daten in einer Textdatei unter Windows 2 Bytes hinzugefügt werden, unter Linux 1 Byte für jede Zeile.
Die Zunahme gegenüber der tatsächlichen Codierung wurde oben beschrieben.
quelle
Dies ist eine zukünftige Referenz für mich. Da die Frage im schlimmsten Fall ist, sollten wir Zeilenumbrüche berücksichtigen. Während RFC 1421 die maximale Zeilenlänge auf 64 Zeichen definiert, gibt RFC 2045 (MIME) an, dass sich höchstens 76 Zeichen in einer Zeile befinden.
Letzteres hat die C # -Bibliothek implementiert. In einer Windows-Umgebung, in der ein Zeilenumbruch 2 Zeichen (\ r \ n) beträgt, erhalten wir Folgendes:
Length = Floor(Ceiling(N/3) * 4 * 78 / 76)
Hinweis: Der Bodenbelag liegt daran, dass während meines Tests mit C #, wenn die letzte Zeile mit genau 76 Zeichen endet, kein Zeilenumbruch folgt.
Ich kann es beweisen, indem ich den folgenden Code ausführe:
Die Antwort für 16 kByte, die mit 76 Zeichenzeilen an base64 codiert wurden: 22422 Zeichen
Angenommen, unter Linux wäre dies der Fall,
Length = Floor(Ceiling(N/3) * 4 * 77 / 76)
aber ich bin noch nicht dazu gekommen, es auf meinem .NET-Kern zu testen.quelle