⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 base64.c

📁 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 + -