Показать сообщение отдельно

base64_encode [C]
  #5  
Старый 26.03.2010, 02:46
Gar|k
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме:
991929

Репутация: 395


По умолчанию base64_encode [C]

Сейчас для 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;
}

Последний раз редактировалось Gar|k; 26.03.2010 в 03:01..
 
Ответить с цитированием