免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1694 | 回复: 2
打印 上一主题 下一主题

[C] 大家帮我看看这个base64解码程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-30 16:14 |只看该作者 |倒序浏览
char *recovery_data(char *s)
{
        char *p = s, *e, *r, *_ret;
        int len = strlen(s);
        unsigned char i, unit[4];
       
        e = s + len;
       
        len = len / 4 * 3 + 1;
        r = _ret = (char *)malloc(len);
       
        while (p < e) {
                memcpy(unit,p,4);
                if (unit[3] == '=')
                        unit[3] = 0;
                if (unit[2] == '=')
                        unit[2] = 0;
                p += 4;
               
                for (i=0; unit[0]!=B64[i] && i<64; i++);
                unit[0] = i==64 ? 0 : i;
                for (i=0; unit[1]!=B64[i] && i<64; i++);
                unit[1] = i==64 ? 0 : i;
                for (i=0; unit[2]!=B64[i] && i<64; i++);
                unit[2] = i==64 ? 0 : i;
                for (i=0; unit[3]!=B64[i] && i<64; i++);
                unit[3] = i==64 ? 0 : i;
                *r++ = (unit[0]<<2) | (unit[1]>>4);
                *r++ = (unit[1]<<4) | (unit[2]>>2);
                *r++ = (unit[2]<<6) | unit[3];
        }
        *r = 0;
        #if RETURNMALLOC == 0
        strcpy(s,_ret);
        free(_ret);
        _ret = s;
        #endif //RETURNMALLOC

        return _ret;
}


解码时遇到回车换行符就结束解码了,也就是只能解码第一行,我不太明白这个程序,问题出在哪里呢?

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2012-11-30 16:19 |只看该作者
本帖最后由 hellioncu 于 2012-11-30 16:19 编辑

回车换行不是合法的base64编码,被转换成0了

论坛徽章:
0
3 [报告]
发表于 2012-11-30 20:38 |只看该作者
这个应该并不是遇到换行符就结束解码吧?只是解码出的字符串中间可能有'\0'字符。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP