Base 64 Encoding / Decoding

What is Base64 :

Base64 is a system for representing raw byte data as ASCII characters.

Base64 is a method of encoding arbitrary binary data as ASCII text. This is necessary for
sending files via Internet email, which can only handle 7-bit ASCII text.

You could use hexadecimal for the same purpose, but it’s not as efficient. One hex digit
(eight bits) corresponds to four bits of input. Data represented in hexadecimal will be
double the size of the original. As its name implies, base64 improves this ratio by
representing six bits with each digit. Thus, 3 input bytes (3 x 8 = 24 bits) translate
into 4 base64 digits (4 x 6 = 24 bits). Each base64 digit is represented by an ASCII
character.

USES :

popular usage of Base64 encoding is in the case of Web Servers implementing HTTP Based
Basic Authentication. When the server wants to restrict or control the access to certain
folders, then, it can password protect them by using HTTP Based Basic Authentication.
Basic Authentication uses the Base64 Encoding standard to encode the Username and
Password and store them.

Base 64 encodeing is used to convert binary files to a “safe” format for transporting
files through smtp (email) and other protocols. It is also used for basic authentication.
With this code, you can decode the current UserName/Password who is visiting a protected
page on your site by requesting one of the serverVariables.

Why Are Attachments Encoded?

Internet e-mail and Usenet news posts were designed for plain text messages. As such,
many systems expect the messages to only contain printable characters from the 7-bit
(first bit of the 8-bit byte is always zero) ASCII character set. These programs can have
problems if the message includes extended 8-bit (the first bit is a one) characters, such
as the various accented letters. This also poses a problem for sending files, such as
images, sound, video, spreadsheets and programs which can contain any combination of
8-bit binary data. This even poses a problem for formatted documents, since many word
processors embed binary control fields in the files.

The way around this limitation is to encode the binary data (attachment) into ASCII
characters before sending. To the mail and news systems that the messages travels
through, the file is just so much text. At the receiving end, the message is decoded back
into the original file, none-the-worse for the experience. Many mail and news programs
automate the encoding and decoding. However, sometimes a separate program may be
required.

Technical Side of Base 64

Base64 encoding contains uppercase, lowercase, numbers, ‘+’, ‘/’ and ‘=’. .

To decode Base64:

Take the encoded stuff in groups of 4 characters and turn each character into a code 0 to
63 thus:

A-Z map to 0 to 25
a-z map to 26 to 51
0-9 map to 52 to 61
+ maps to 62
/ maps to 63

Table 1: The Base64 Alphabet

Value Encoding Value Encoding Value Encoding Value Encoding
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w (pad) =
15 P 32 g 49 x
16 Q 33 h 50 y

Base64 uses a 65-character subset of US-ASCII, allowing 6 bits for each character. For
Example, take the character ‘m’ for instance. The character ‘m’ has a Base64 value of 38.
How did we get this value? Well, there is a Base64 Alphabet chart included at the end of
this tutorial, which contains all the alphabets and their corresponding Base64 value. So,
each time you want to get the Base64 value of an ASCII character, you need to refer to
this Base64 Value chart. Anyway, getting back to our example, the character ‘m’ has a
Base64 value of 38, which when represented in binary form, is 100110.

Now, let us take yet another example to see how a text is encoded by Base64 Encoding.
Say, that the text to be encoded is: ‘mne’. The text is firstly converted into its
decimal value.

The character “m” has the decimal value of 109
The character “n” has the decimal value of 110
The character “e” has the decimal value of 101

This implies that “mne” ( three 8-bit-byte text string) is 109 110 101 in decimal form.
When converted to binary the string looks like this:

01101101 01101110 01100101

These three 8-bit-bytes are concatenated (linked together) to make a 24-bit stream:

011011010110111001100101

This 24-bit stream is then split up into four 6-bit sections:

011011 010110 111001 100101

We now have 4 values. These binary values, when converted into decimal form look like this:

27 22 57 37

Now each character of the Base64 character set has a decimal value. We now change these
decimal values into the Base64 equivalent:

27 = b
22 = w
57 = 5
37 = l

So “mne” when encoded as Base64 reads as “bw5l”. Below is a table of the Base64 character
set with their decimal values:

USEFUL Links : Check this site,& a pretty good tool is available for download