void base64_encode_s(const unsigned char *str, long inlen, std::string& outstr, long* lpBufLen)
{
long len;
long str_len;
//unsigned char *res;
//std::shared_ptr<std::string> res;
int i,j;
//定义base64编码表
const unsigned char *base64_table = (const unsigned char *)("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"); //计算经过base64编码后的字符串长度
str_len= inlen;
if(str_len % == )
len=str_len/*;
else
len=(str_len/+)*; if (NULL != lpBufLen) {
*lpBufLen = len;
} //std::shared_ptr<std::string> res(new std::string(sizeof(unsigned char)*len+1)); //(unsigned char *)malloc(sizeof(unsigned char)*len+1);
outstr.resize(sizeof(unsigned char)*len+);
outstr[len] = '\0'; //以3个8位字符为一组进行编码
for(i=,j=;i<len-;j+=,i+=)
{
outstr[i] = base64_table[str[j]>>]; //取出第一个字符的前6位并找出对应的结果字符
outstr[i+] = base64_table[(str[j]&0x3)<< | (str[j+]>>)]; //将第一个字符的后位与第二个字符的前4位进行组合并找到对应的结果字符
outstr[i+] = base64_table[(str[j+]&0xf)<< | (str[j+]>>)]; //将第二个字符的后4位与第三个字符的前2位组合并找出对应的结果字符
outstr[i+] = base64_table[str[j+]&0x3f]; //取出第三个字符的后6位并找出结果字符
} switch(str_len % )
{
case :
outstr[i-]='=';
outstr[i-]='=';
break;
case :
outstr[i-]='=';
break;
} return;
} void base64_decode_s(const unsigned char *code, std::string& outstr, long* lpBufLen)
{
//根据base64表,以字符找到对应的十进制数据
int table[]={,,,,,,,,,,,,
,,,,,,,,,,,,
,,,,,,,,,,,,
,,,,,,,,,,,
,,,,,,,,
,,,,,,,,,,,
,,,,,,,,,,,,
,,,,,,,,,
,,,,,,,,,,,
,,,,,,,,,
,,,,,,,,,
,,,,,,
};
long len;
long str_len;
//unsigned char *res = NULL;
int i,j; //计算解码后的字符串长度
len = strlen((const char*)code);
//判断编码后的字符串后是否有=
if(strstr((const char*)code,"=="))
str_len=len/*-;
else if(strstr((const char*)code,"="))
str_len=len/*-;
else
str_len=len/*; if (NULL != lpBufLen) {
*lpBufLen = str_len;
} //res = (unsigned char*)malloc(sizeof(unsigned char)*str_len+1);
outstr.resize(sizeof(unsigned char)*len+);
//memset(outstr.,0, str_len+1);
//res[str_len]='\0'; //以4个字符为一位进行解码
for(i=,j=;i < len-;j+=,i+=)
{
outstr[j]=((unsigned char)table[code[i]])<< | (((unsigned char)table[code[i+]])>>); //取出第一个字符对应base64表的十进制数的前6位与第二个字符对应base64表的十进制数的后2位进行组合
outstr[j+]=(((unsigned char)table[code[i+]])<<) | (((unsigned char)table[code[i+]])>>); //取出第二个字符对应base64表的十进制数的后4位与第三个字符对应bas464表的十进制数的后4位进行组合
outstr[j+]=(((unsigned char)table[code[i+]])<<) | ((unsigned char)table[code[i+]]); //取出第三个字符对应base64表的十进制数的后2位与第4个字符进行组合
} return;
}