base64编码3字符转化4字符实现
2015-07-14 16:36
267 查看
最近学习SMTP协议遇到base64编码加密。特学习一下。尝试自己实现一下转化。
base64编码原理:
1)base64的编码都是按字符串长度,以每3个8bit的字符为一组,
2)然后针对每组,首先获取每个字符的ASCII编码,
3)然后将ASCII编码转换成8bit的二进制,得到一组3*8=24bit的字节
4)然后再将这24bit划分为4个6bit的字节,并在每个6bit的字节前面都填两个高位0,得到4个8bit的字节
5)然后将这4个8bit的字节转换成10进制,对照Base64编码表 ,得到对应编码后的字符。
//base64编码表
char base64_enc_map[] =
{
'A','B','C','D','E','F','G','H','I','J','K',
'L','M','N','O','p','Q','R','S','T','U',
'V','W','X','Y','Z','a','b','c','d','e',
'f','g','h','i','j','k','L','m','n','o',
'p','q','r','s','t','u','v','w','x','y',
'z','0','1','2','3','4','5','6','7','8',
'9','+','/'
};
unsigned char c1,c2,c3;
unsigned char d1,d2,d3,d4;
unsigned char c11,c12,c21,c22,c31,c32;//存储字符分割后的前部分和后部分
c11 = c1&0xfc;
c12 = c1&0x03;
c21 = c2&0xf0;
c22 = c2&0x0f;
c31 = c3&0xc0;
c32 = c3&0x3f;
d1 = c11>>2;
d2 = c12<<4+c21>>4;
d3 = c22<<2+c31<<6;
d4 = c32;
d1 = base64_enc_map[d1];
d2 = base64_enc_map[d2];
d3 = base64_enc_map[d1];
d4 = base64_enc_map[d1];
base64编码原理:
1)base64的编码都是按字符串长度,以每3个8bit的字符为一组,
2)然后针对每组,首先获取每个字符的ASCII编码,
3)然后将ASCII编码转换成8bit的二进制,得到一组3*8=24bit的字节
4)然后再将这24bit划分为4个6bit的字节,并在每个6bit的字节前面都填两个高位0,得到4个8bit的字节
5)然后将这4个8bit的字节转换成10进制,对照Base64编码表 ,得到对应编码后的字符。
//base64编码表
char base64_enc_map[] =
{
'A','B','C','D','E','F','G','H','I','J','K',
'L','M','N','O','p','Q','R','S','T','U',
'V','W','X','Y','Z','a','b','c','d','e',
'f','g','h','i','j','k','L','m','n','o',
'p','q','r','s','t','u','v','w','x','y',
'z','0','1','2','3','4','5','6','7','8',
'9','+','/'
};
unsigned char c1,c2,c3;
unsigned char d1,d2,d3,d4;
unsigned char c11,c12,c21,c22,c31,c32;//存储字符分割后的前部分和后部分
c11 = c1&0xfc;
c12 = c1&0x03;
c21 = c2&0xf0;
c22 = c2&0x0f;
c31 = c3&0xc0;
c32 = c3&0x3f;
d1 = c11>>2;
d2 = c12<<4+c21>>4;
d3 = c22<<2+c31<<6;
d4 = c32;
d1 = base64_enc_map[d1];
d2 = base64_enc_map[d2];
d3 = base64_enc_map[d1];
d4 = base64_enc_map[d1];
相关文章推荐
- linux环境变量的设置
- java重载跟重写的用法
- hdu 1853 Cyclic Tour(最小费用最大流)
- TCP/IP网络编程 学习笔记_6 --定义应用层协议
- 【小白的成长】activity跳转如何正确跳转
- 11-基于CPCI的中频功率放大收发板
- TCP/IP网络编程 学习笔记_6 --定义应用层协议
- 仅需一个参数就可搞定OneProxy的VIP机制
- 【Java基础学习笔记】Java中Socket+Swing设计简单通信
- iOS内存管理小总结
- Scala:类的属性、对象私有属性
- 微信sdk的使用出现invalid url domain
- 11gR2 Database Services for "Policy" and "Administrator" Managed Databases (文件 ID 1481647.1)
- CSS3 Border-image出自W3CPLUS
- HTML标签_Form
- Android精品资源汇总,10个源码(持续更新)
- 对逆变和协变的理解
- actionbar tab 字体大小设置
- Java创建以及读写xml文档(dom方式)
- Linux命令之查看系统信息