您的位置:首页 > 编程语言 > C语言/C++

Base64编码解码c语言实现

2011-11-17 15:15 459 查看
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;

}

解码部分能解出来, 不过, 估计有问题, 有空再去看看
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: