Encrypting then Base64 Encoding

Ciphertext can be output in binary format. For example, gpg defaults to binary format, and you need to specify --armor to make it base64:

--armor
-a
    Create ASCII armored output. The default is to create the binary OpenPGP format. 

The reason you see ASCII/base64 more often is that it is easier to transfer and manipulate than binary. SMTP email, for example, cannot handle binary data without encoding it, so having a non-binary format makes it simpler to email encrypted text. FTP may default to non-binary mode which will introduce errors when transferring a binary file. Even something as simple as popping open a file in an editor to make sure it "looks like it's there" is easier with non-binary formats.


A web browser has to print a visual representation of the binary data. The usual visual representation of binary data is the hexadecimal notation.

Now observe: The space overhead of hex-encoded data is factor 2 (we need 2 ascii characters for one byte). The space overhead of base64-encoded data is only 1.33, making it more space-efficient than hex-encoded data.

Moreover, I suspect that the tool support for base64-encoded data is at least as good as for hex-encoded data.

For instance, you can copy-paste a base64-encoded ciphertext directly into a PEM file.