📄 base64.c
字号:
int base64_enc(char *dest, const char *src, int count)
{
const unsigned char Base64_EnCoding[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
int len = 0;
unsigned char *pt = (unsigned char *)src;
/* count小于0,则自行计算src的长度*/
if( count < 0 )
{
while( *pt++ )
{ count++; }
pt = (unsigned char *)src;
}
if( !count ) return 0;
while( count > 0 )
{
*dest++ = Base64_EnCoding[ ( pt[0] >> 2 ) & 0x3f];
if( count > 2 )
{
*dest++ = Base64_EnCoding[((pt[0] & 3) << 4) | (pt[1] >> 4)];
*dest++ = Base64_EnCoding[((pt[1] & 0xF) << 2) | (pt[2] >> 6)];
*dest++ = Base64_EnCoding[ pt[2] & 0x3F];
}
else
{
switch( count )
{
case 1:
*dest++ = Base64_EnCoding[(pt[0] & 3) << 4 ];
*dest++ = '=';
*dest++ = '=';
break;
case 2:
*dest++ = Base64_EnCoding[((pt[0] & 3) << 4) | (pt[1] >> 4)];
*dest++ = Base64_EnCoding[((pt[1] & 0x0F) << 2) | (pt[2] >> 6)];
*dest++ = '=';
}
}
pt += 3;
count -= 3;
len += 4;
}
*dest = 0;
return len;
}
int base64_dec(char* dest,const char* src, int count)
{
unsigned char ucs[4];
unsigned char *pt = (unsigned char *)src;
int len = 0 , nfag = 0 , i = 0;
/*count小于0,则自行计算src的长度*/
if( count < 0 )
{
while( *pt++ ){ count++; }
pt = (unsigned char *)src;
}
if( !count ) return 0;
while( count > 0 )
{
nfag = 0;
for( i=0 ; i<4 ; i++ )
{
if (*pt >= 'A' && *pt <= 'Z')
ucs[i] = *pt - 'A';
else if (*pt >= 'a' && *pt <= 'z')
ucs[i] = *pt - 'a' + 26;
else if (*pt >= '0' && *pt <= '9')
ucs[i] = *pt - '0' + 52;
else{
switch (*pt)
{
case '+':
ucs[i] = 62;
break;
case '/':
ucs[i] = 63;
break;
case '=': /* base64 padding */
ucs[i] = 0;
break;
case '\t':
case '\r':
case '\n':
case ' ':
nfag++;
i--;
break;
case '\0': /*遇到文尾,直接返回上次字符 buf 的长度*/
*dest = 0;
return len;
break;
default: /* 遇到其它非法字符,直接返回 */
*dest = 0;
return -1;
}
}
pt++;
}
*dest++ = (ucs[0] << 2) | (ucs[1] >> 4);
*dest++ = (ucs[1] << 4) | (ucs[2] >> 2);
*dest++ = (ucs[2] << 6) | (ucs[3]);
count -= nfag + 4;
len += 3;
}
*dest = 0;
return len;
}
int main(int argc, char** argv)
{
char s1[] = "www.google.com";
char s2[100];
char s3[100];
int k = base64_enc(s2, s1, strlen(s1));
int m = base64_dec(s3, s2, k);
printf("%s\n", s2);
printf("%s\n", s3);
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -