| 论坛注册| 加入收藏 | 设为首页| RSS
Google
您当前的位置:首页 > Linux频道 > Linux开发区 > 软件开发

一个base64编码与解码函数

时间:2007-12-06 18:11:54  来源:Linux联盟收集整理  作者:

/*R4sLinux联盟
 * code by wzt base64_encode & decodeR4sLinux联盟
 */
R4sLinux联盟
 R4sLinux联盟
#include <stdio.h>R4sLinux联盟
#include <stdlib.h>R4sLinux联盟
#include <string.h>R4sLinux联盟
R4sLinux联盟
char base64_map[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";R4sLinux联盟
R4sLinux联盟
char base64_decode_map[256] = {R4sLinux联盟
     255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,R4sLinux联盟
     255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,R4sLinux联盟
     255, 255, 255, 62, 255, 255, 255, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255,R4sLinux联盟
     255, 0, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,R4sLinux联盟
     15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255, 255, 26, 27, 28,R4sLinux联盟
     29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,R4sLinux联盟
     49, 50, 51, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,R4sLinux联盟
     255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,R4sLinux联盟
     255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,R4sLinux联盟
     255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,R4sLinux联盟
     255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,R4sLinux联盟
     255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,R4sLinux联盟
     255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255};R4sLinux联盟
R4sLinux联盟
unsigned char test[100]= "ddsfasdfd";R4sLinux联盟
unsigned char encode[100], decode[100];R4sLinux联盟
R4sLinux联盟
void base64_encode(char *src, int src_len, char *dst)R4sLinux联盟
{R4sLinux联盟
        int i = 0, j = 0;R4sLinux联盟
        R4sLinux联盟
        for (; i < src_len - src_len % 3; i += 3) {R4sLinux联盟
                dst[j++] = base64_map[(src[i] >> 2) & 0x3f];R4sLinux联盟
                dst[j++] = base64_map[((src[i] << 4) | (src[i + 1] >> 4)) & 0x3f];R4sLinux联盟
                dst[j++] = base64_map[((src[i + 1] << 2) | (src[i + 2] >> 6 )) & 0x3f];R4sLinux联盟
                dst[j++] = base64_map[src[i + 2] & 0x3f];R4sLinux联盟
        }R4sLinux联盟
        R4sLinux联盟
        if (src_len % 3 == 1) {R4sLinux联盟
                 dst[j++] = base64_map[(src[i] >> 2) & 0x3f];R4sLinux联盟
                 dst[j++] = base64_map[(src[i] << 4) & 0x3f];R4sLinux联盟
                 dst[j++] = '=';R4sLinux联盟
                 dst[j++] = '=';R4sLinux联盟
        }R4sLinux联盟
        else if (src_len % 3 == 2) {R4sLinux联盟
                dst[j++] = base64_map[(src[i] >> 2) & 0x3f];R4sLinux联盟
                dst[j++] = base64_map[((src[i] << 4) | (src[i + 1] >> 4)) & 0x3f];R4sLinux联盟
                dst[j++] = base64_map[(src[i + 1] << 2) & 0x3f];R4sLinux联盟
                dst[j++] = '=';R4sLinux联盟
        }R4sLinux联盟
        R4sLinux联盟
        dst[j] = '\0';R4sLinux联盟
}R4sLinux联盟
R4sLinux联盟
void base64_decode(char *src, int src_len, char *dst)R4sLinux联盟
{R4sLinux联盟
        int i = 0, j = 0;R4sLinux联盟
        R4sLinux联盟
        for (; i < src_len; i += 4) {R4sLinux联盟
                dst[j++] = base64_decode_map[src[i]] << 2 |R4sLinux联盟
                        base64_decode_map[src[i + 1]] >> 4;R4sLinux联盟
                dst[j++] = base64_decode_map[src[i + 1]] << 4 |R4sLinux联盟
                        base64_decode_map[src[i + 2]] >> 2;R4sLinux联盟
                dst[j++] = base64_decode_map[src[i + 2]] << 6 |R4sLinux联盟
                        base64_decode_map[src[i + 3]];R4sLinux联盟
        }R4sLinux联盟
        R4sLinux联盟
        dst[j] = '\0';R4sLinux联盟
}R4sLinux联盟
R4sLinux联盟
int main(void)R4sLinux联盟
{R4sLinux联盟
        printf("%s\n",test);R4sLinux联盟
        R4sLinux联盟
        base64_encode(test, strlen(test), encode);R4sLinux联盟
        printf("%s\n",encode);R4sLinux联盟
        R4sLinux联盟
        base64_decode(encode, strlen(encode), decode);R4sLinux联盟
        printf("%s\n",decode);R4sLinux联盟
        R4sLinux联盟
        return 0;R4sLinux联盟
}
R4sLinux联盟

来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
    无相关信息
栏目更新
栏目热门