网络协议分析中常见编码的原理及其解码函数
(基于C/C++语言实现)
本文由CSDN-蚍蜉撼青松 【主页:http://blog.csdn.net/howeverpf】原创,转载请注明出处!
一、Base64解码
1.1 简介与编码原理
在MIME格式的电子邮件中,base64可以用来将binary的字节序列数据编码成ASCII字符序列构成的文本。使用时,在传输编码方式中指定base64。使用的字符包括大小写字母各26个,加上10个数字,和加号“+”,斜杠“/”,一共64个字符,等号“=”用来作为后缀用途。完整的base64定义可见RFC 1421和RFC 2045。
----------------------------本段引自维基百科:http://zh.wikipedia.org/wiki/Base64
Base64编码的过程是把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后对于每个6Bit,在其高位再添两位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。在电子邮件中,根据RFC 822规定,每76个字符,还需要加上一个回车换行。由此可以估算编码后数据长度大约为原长的135.1%。
Base64编码的规则:
- 对输入的原始字节序列,按每3个8bit的字节分为一组,每组共24bit;【三三分组】
- 针对每组分别处理,将这24bit划分为4个6bit的字节,并在每个6bit的字节前面都填两个高位0,得到4个8bit的字节;【三变四】
- 将这4个8bit的字节分别转换成10进制,对照Base64编码表 (见图1-1),得到对应编码后的可打印字符;【查表】
- 每76个字符加一个换行符;【换行处理】
- 当输入的原始字节序列长度不是3的整数倍时,需在输入字节序列最后用零补齐。在这种情况下,编码后结果必然不足四个字节,需在编码结果最后用'='补齐;这就保证编码后字节序列的长度一定是4的倍数。【结束处理】