If a server received a base64 string and wanted to check it's length before converting,, say it wanted to always permit the final byte array to be 16KB. How big could a 16KB byte array possibly become when converted to a Base64 string (assuming one byte per character)?
6 Answers
Base64 encodes each set of three bytes into four bytes. In addition the output is padded to always be a multiple of four.
This means that the size of the base-64 representation of a string of size n is:
ceil(n / 3) * 4
So, for a 16kB array, the base-64 representation will be ceil(16*1024/3)*4 = 21848 bytes long ~= 21.8kB.
A rough approximation would be that the size of the data is increased to 4/3 of the original.

- 767
- 1
- 9
- 22

- 228,013
- 71
- 433
- 510
-
Do we need to add 2 to the length or not? – vIceBerg Nov 26 '15 at 05:34
-
@vIceBerg, It depends on whether you are using `ceil` with `float` numbers, or just `int` numbers. (and no `ceil`) – 700 Software Jul 26 '16 at 12:57
-
10I guess the simpler way to put this is that you add 1/3 of original size. – mvmn Oct 31 '16 at 11:39
-
1In the example you proposed, showing the result in the same order of measure would increase a bit the quality of the answer (21,3 KB instead of 21848 Bytes). – Ivan De Paz Centeno Feb 03 '17 at 12:23
From Wikipedia
Note that given an input of n bytes, the output will be (n + 2 - ((n + 2) % 3)) / 3 * 4 bytes long, so that the number of output bytes per input byte converges to 4 / 3 or 1.33333 for large n.
So 16kb * 4 / 3 gives a little over 21.8 kb, or 21,848 bytes to be exact.
Hope this helps

- 553
- 3
- 19

- 50,774
- 20
- 136
- 184
16kb is 131,072 bits. Base64 packs 24-bit buffers into four 6-bit characters apiece, so you would have 5,462 * 4 = 21,848 bytes.

- 61,439
- 10
- 123
- 137
Since the question was about the worst possible increase, I must add that there are usually line breaks at around each 80 characters. This means that if you are saving base64 encoded data into a text file on Windows it will add 2 bytes, on Linux 1 byte for each line.
The increase from the actual encoding has been described above.

- 527
- 5
- 6
-
9Isn't the extreme case that 1 source byte becomes 4 base64 bytes, so a 4x increase? Any longer source material gets a better ratio until, as others have said, it asymptotically approaches 1.333... – Olie May 04 '16 at 22:02
This is a future reference for myself. Since the question is on worst case, we should take line breaks into account. While RFC 1421 defines maximum line length to be 64 char, RFC 2045 (MIME) states there'd be 76 char in one line at most.
The latter is what C# library has implemented. So in Windows environment where a line break is 2 chars (\r\n), we get this: Length = Floor(Ceiling(N/3) * 4 * 78 / 76)
Note: Flooring is because during my test with C#, if the last line ends at exactly 76 chars, no line-break follows.
I can prove it by running the following code:
byte[] bytes = new byte[16 * 1024];
Console.WriteLine(Convert.ToBase64String(bytes, Base64FormattingOptions.InsertLineBreaks).Length);
The answer for 16 kBytes encoded to base64 with 76-char lines: 22422 chars
Assume in Linux it'd be Length = Floor(Ceiling(N/3) * 4 * 77 / 76)
but I didn't get around to test it on my .NET core yet.

- 832
- 11
- 26
Also it would depend on actual character encoding, i.e. if we encode to UTF-32 string, each base64 character would consume 3 additional bytes (4 byte per char).

- 1,949
- 1
- 16
- 31