base64編碼原理:
採用64個基本的ASCII碼字符對數據進行重新編碼,它將需要編碼的數據拆成字節數,以三個爲一族,按照順序排列24位數據,再把這24位數據分成4組,每組6位,再在每組的最高位補2個0湊足一個字節,如所需的編碼數據的字節數不是3的整數,也就是說在分組時最後一組不夠3個字節的,在最後一組填充1-2個0字節,並在最後編碼完成之後在結尾添加1-2個'='
實現源代碼如下
- static const char cb64[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
- void base64encode(char*out,const unsigned char* in,int len)
- {
- for(;len >= 3; len -= 3)
- {
- *out++ = cb64[in[0]>>2];
- *out++ = cb64[((in[0]&0x03)<<4)|(in[1]>>4)];
- *out++ = cb64[((in[1]&0x0f)<<2)|((in[2]&0xc0)>>6)];
- *out++ = cb64[in[2]&0x3f];
- in += 3;
- }
- if(len > 0)
- {
- unsigned char fragment;
- fragment = (in[0]&0x03)<<4 ;
- if(len > 1)
- fragment |= in[1]>>4;
- *out++ = cb64[in[0]>>2];
- *out++ = cb64[fragment];
- *out++ = (len < 2)? '=' : cb64[(in[1]&0x0f)<<2];
- *out++ = '=';
- }
- *out = '\0';
- }