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;
}
blog comments powered by Disqus
сюда туда