码迷,mamicode.com
首页 > 编程语言 > 详细

C语言实现base64编码,base64解码

时间:2014-10-30 19:29:31      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:des   ar   for   sp   on   bs   amp   as   har   

char *base64_encode(char *binData, char *base64, int binLength)
{
        int i = 0;
        int j = 0;
        int current = 0;
        for (i = 0; i < binLength; i += 3) {

                //获取第一个6位
                current = (*(binData+i) >> 2) & 0x3F;
                *(base64 + j++) = base64char[current];

                //获取第二个6位的前两位
                current = (*(binData+i) << 4) & 0x30;

                //如果只有一个字符,那么需要做特殊处理
                if (binLength <= (i+1)) {
                        *(base64 + j++) = base64char[current];
                        *(base64 + j++) = ‘=‘;
                        *(base64 + j++) = ‘=‘;
                        break;
                }

                //获取第二个6位的后四位
                current |= (*(binData+i+1) >> 4 ) & 0xf;
                *(base64 + j++) = base64char[current];
                //获取第三个6位的前四位
                current = (*(binData+i+1) << 2 ) & 0x3c;
                if (binLength <= (i+2)) {
                        *(base64 + j++) = base64char[current];
                        *(base64 + j++) = ‘=‘;
                        break;
                }

                //获取第三个6位的后两位
                current |= (*(binData+i+2) >> 6) & 0x03;
                *(base64 + j++) = base64char[current];

                //获取第四个6位
                current = *(binData+i+2) & 0x3F;
                *(base64 + j++) = base64char[current];
        }
        *(base64+j) = ‘\0‘;

        return base64;
}




char *base64_decode(char const *base64Str, char *debase64Str, int encodeStrLen)
{
        int i = 0;
        int j = 0;
        int k = 0;
        char temp[4] = "";

        for (i = 0; i < encodeStrLen; i += 4) {
                for (j = 0; j < 64 ; j++) {
                        if (*(base64Str + i) == base64char[j]) {
                                temp[0] = j;
                        }
                }

                for (j = 0; j < 64 ; j++) {
                        if (*(base64Str + i + 1) == base64char[j]) {
                                temp[1] = j;
                        }
                }


                for (j = 0; j < 64 ; j++) {
                        if (*(base64Str + i + 2) == base64char[j]) {
                                temp[2] = j;
                        }
                }


                for (j = 0; j < 64 ; j++) {
                        if (*(base64Str + i + 3) == base64char[j]) {
                                temp[3] = j;
                        }
                }

                *(debase64Str + k++) = ((temp[0] << 2) & 0xFC) | ((temp[1]>>4) & 0x03);
                if ( *(base64Str + i + 2)  == ‘=‘ )
                        break;

                *(debase64Str + k++) = ((temp[1] << 4) & 0xF0) | ((temp[2]>>2) & 0x0F);
                if ( *(base64Str + i + 3) == ‘=‘ )
                        break;

                *(debase64Str + k++) = ((temp[2] << 6) & 0xF0) | (temp[3] & 0x3F);
        }
        return debase64Str;
}


























C语言实现base64编码,base64解码

标签:des   ar   for   sp   on   bs   amp   as   har   

原文地址:http://my.oschina.net/u/195896/blog/338959

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!