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;
{
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;
}
解码部分能解出来, 不过, 估计有问题, 有空再去看看