Ниже приведенна сама функция. Она имеет два параметра: intext (для текста который нужно зашифровать) и outtext (для зашифрованного в base64 хеша). Статическая символьная строка table64 составляет весь алфовит base64.
void base64Encode(char *intext, char *outtext)Подробнее об Base64 можешь прочитать в википедии
{
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;
}