Base64
Encode binary information 8 bits into ASCII.
This is PEM base encode, it exists other base64 encoding scheme like this used by crypt.
Algorithm
3 x 8 bits binary are concatenated to form a 24bits word that is split in 4 x 6bits each being translating into an ascii value using a character ordered in following list :
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 0000000000111111111122222222223333333333444444444455555555556666 0123456789012345678901234567890123456789012345678901234567890123
[what makes 26 * 2 + 10 + 2 = 64 values]
Since it encodes by group of 3 bytes, when last group of 3 bytes miss one byte then = is used, when it miss 2 bytes then == is used for padding.
Openssl command
base64 or -enc base64 can be used to decode lines see Command_Line_Utilities
EVP API
crypto/evp/encode.c crypto/evp/bio_b64.C
WARNINGS
other unsupported base64 scheme
Warning crypt() password encryption function uses another base64 scheme which is not the openssl base64 one. :
./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 0000000000111111111122222222223333333333444444444455555555556666 0123456789012345678901234567890123456789012345678901234567890123
base64 uses PEM 80 characters per line
Base64 itself does not impose a line split, but openssl uses it in PEM context hence enforce that base64 content is splitted by lines with a maximum of 80 characters.