|
|
|
|
|
by soliton4
970 days ago
|
|
it didnt go into detail about the purpose of the = / == padding.
and it also didnt show in the example how to handle data that can not be devided into groups of 6 bits without bits left over.
i think i have an understanding of how to do it but it would be nice to be certain.
could someone address the following 2 questions in a short and exhaustive way: - when do you use =, when do you use == and do you always add = / == or are there cases where you dont add = / == ? - how to precisely handle leftover bits. for example the string "5byte". and is there anything to consider when decoding? |
|
For context: since a base64 character represents 6 bits, every block of three data bytes corresponds to a block of four base64 encoded characters. (83 == 24 == 64)
That means it's often convenient to process base64 data 4 characters at a time. (in the same way that it's often convenient to process hexadecimal data 2 characters at a time)
1) You use = to pad the encoded string to a multiple of 4 characters, adding zero, one, or two as needed to hit the next multiple-of-4.
So, "543210" becomes "543210==", "6543210" becomes "6543210=", and "76543210" doesn't need padding.
(You'll never need three = for padding, since one byte of data already needs at least two base64 characters)
2) Leftover bits should just be set to zero; the decoder can see that there's not enough bits for a full byte and discard them.
3) In almost all modern cases, the padding isn't necessary, it's just convention.
The Wikipedia article is pretty exhaustive: https://en.wikipedia.org/wiki/Base64