Base64编码解码c语言实现

来源:互联网 发布:linux 查看无线网卡 编辑:程序博客网 时间:2024/05/03 06:02
void Base64Encrypt(char *clearText_in, char *cipherText_out)
{
    char *p = clearText_in;
    char *q = cipherText_out;
    char table[65] = {"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"};

    if(NULL == clearText_in || !strlen(clearText_in))
        return ;
    for(; *p; p += 3, q += 4)
    {
        q[0] = table[int(p[0] >> 2)];
        if(0 == p[1])
        {
            q[1] = table[int((p[0] & 0x03) << 4)];
            q[2] = '=';
            q[3] = '=';
            q[4] = 0;
            break;
        }
        q[1] = table[int(((p[0] & 0x03) << 4) | ((p[1] & 0xF0) >> 4))];
        if(0 == p[2])
        {
            q[2] = table[int((p[1] & 0x0F) << 2)];
            q[3] = '=';
            q[4] = 0;
            break;
        }
        q[2] = table[int(((p[1] & 0x0F) << 2) | ((p[2] & 0xC0) >> 6))];
        q[3] = table[int(p[2] & 0x3F)];
        if('\0' == p[3])
            q[4] = 0;
    }
}


char getByteInTable(char ch)
{
    char table[65] = {"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"};
    int i;
    for(i = 0; i < 65; ++i)
    {
        if(ch == table[i])
            return (char)i;
    }
    return (char)0xff;
}

void Base64Decrypt(char *cipherText_in, char *clearText_out)
{
    char ret;
    char *p = cipherText_in;
    char *q = clearText_out;

    if(NULL == cipherText_in || !strlen(cipherText_in))
        return ;
    for(; *p; p += 4, q += 3)
    {
        ret = getByteInTable(p[0]);
        if((char)0xff == ret)
            break;
        q[0] = ret << 2;
        ret = getByteInTable(p[1]);
        if((char)0xff == ret)
            return;
        q[0] = q[0] | (ret >> 4);
        q[1] = ret << 4;
        ret = getByteInTable(p[2]);
        if((char)0xff == ret)
            return;
        q[1] = q[1] | ret >> 2;
        q[2] = ret << 6;
        ret = getByteInTable(p[3]);
        if((char)0xff == ret)
            return;
        q[2] = q[2] | ret;
    }
    q[0] = 0;

}



解码部分能解出来, 不过, 估计有问题, 有空再去看看


原创粉丝点击