Base64
Моя модификация вот этого. Понадобилось для HTTP аутентификации
// base64 by Gar|k
//#define B64_DEF_LINE_SIZE 72
//#define B64_MIN_LINE_SIZE 4
// buf - строка для кодирования
// sizebuf - размер строки
// rez - буффер для результата
// функция возвращает размер полученого хеша
int base64_encode(char *buf,int sizebuf,char *rez,int linesize)
{
static const char cb64[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
unsigned char in[3], out[4];
int i, len, blocksout=0,count=0;
while(count!=sizebuf)
{
len = 0;
for( i = 0; i < 3; i++ )
{
if( count!=sizebuf )
{ in[i] = (unsigned char)*buf++; count++; len++; }
else in[i] = 0;
}
if( len )
{
out[0] = cb64[ in[0] >> 2 ];
out[1] = cb64[ ((in[0] & 0x03) << 4) | ((in[1] & 0xf0) >> 4) ];
out[2] = (unsigned char) (len > 1 ? cb64[ ((in[1] & 0x0f) << 2) | ((in[2] & 0xc0) >> 6) ] : '=');
out[3] = (unsigned char) (len > 2 ? cb64[ in[2] & 0x3f ] : '=');
memcpy(rez,out,4); rez+=4;
blocksout++;
}
if( blocksout >= (linesize/4) || count==sizebuf ) blocksout = 0;
}
*rez++=0;
return count;
}
Комментарии
Отправить комментарий