Алгоритм код base64 шифрования на С++

Base64 буквально означает — позиционная система счисления с основанием 64. Здесь 64 — это наибольшая степень двойки (26), которая может быть представлена с использованием печатных символов ASCII. Эта система широко используется в электронной почте для представления бинарных файлов в тексте письма (транспортное кодирование). Все широко известные варианты, известные под названием Base64, используют символы A-Z, a-z и 0-9, что составляет 62 знака, для остальных двух знаков в разных системах используются различные символы.
Ниже приведенна сама функция. Она имеет два параметра: intext (для текста который нужно зашифровать) и outtext (для зашифрованного в base64 хеша). Статическая символьная строка table64 составляет весь алфовит base64.

void base64Encode(char *intext, char *outtext)
{
static char table64[]=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
unsigned char ibuf[3];
unsigned char obuf[4];
int i;
int inputparts;


while(*intext) {
for (i = inputparts = 0; i < 3; i++) {
if(*intext) {
inputparts++;
ibuf[i] = *intext;
intext++;
}
else
ibuf[i] = 0;
}


obuf [0] = (ibuf [0] & 0xFC) >> 2;
obuf [1] = ((ibuf [0] & 0x03) << 4) | ((ibuf [1] & 0xF0) >> 4);
obuf [2] = ((ibuf [1] & 0x0F) << 2) | ((ibuf [2] & 0xC0) >> 6);
obuf [3] = ibuf [2] & 0x3F;


switch(inputparts) {
case 1: /* читать только один байт */
sprintf(outtext, "%c%c==",
table64[obuf[0]],
table64[obuf[1]]);
break;
case 2: /* читать два байта */
sprintf(outtext, "%c%c%c=",
table64[obuf[0]],
table64[obuf[1]],
table64[obuf[2]]);
break;
default:
sprintf(outtext, "%c%c%c%c",
table64[obuf[0]],
table64[obuf[1]],
table64[obuf[2]],
table64[obuf[3]] );
break;
}
outtext += 4;
}
*outtext=0;
}
Подробнее об Base64 можешь прочитать в википедии