Base64编码简述:
1.Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。
2.Base64,就是包括小写字母a-z、大写字母A-Z、数字0-9、符号"+"、"/"一共64个字符的字符集,(任何符号都可以转换成这个字符集中的字符,这个转换过程就叫做base64编码。
3.Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。
编码原理
关于这个编码的规则:
1.把3个字节变成4个字节。
2.每76个字符加一个换行符。
3.最后的结束符也要处理。
以下示例
转换前 11111111, 11111111, 11111111 (二进制)
转换后 00111111, 00111111, 00111111, 00111111 (二进制)
#include <string.h>
#include <stdio.h>
int main()
{
// 设定编码前原数据为3个8bit的字节
// data1 : 1111 1111
// data2 : 1111 1111
// data3 : 1111 1111
// 编码后应转换为4个6bit的字节 采用高位补零 0011 1111 0011 1111 0011 1111 0011 1111(二进制)
char data1 = 0xff, data2 = 0xff, data3 = 0xff;
// 按照顺序对三个数据进行位运算操作
// 第一个字节获得 0011 1111 data1 被分为1111 11 11
char temp1 = data1 & 0x3f;
// 第二个字节获得 0011 1111 包含data1的低2位1111 1111&0000 0011--> 0000 0011 -->0011 0000 和data2的高4位
// 1111 1111 & (0000 1111-->1111 0000)-->1111 0000 -->0000 1111 &0011 0000
char temp2 = ((data1 & 0x3) << 4) | ((data2 & (0xf << 4)) >> 4);
// 第三个字节获得0011 1111 包含data2的低4位1111 1111&0000 1111-->0000 1111 <<2 -->0011 1100
// data3的高2位 1111 1111 &(0000 0011<<6)-->1100 0000 >>4-->0000 0011
// 位或后得到0011 1111
char temp3 = ((data2 & 0xf) << 2) | ((data3 & (0x3 << 6)) >> 6);
// 第四个字节获得0011 1111 包含data3的低6位 1111 1111&0011 1111
char temp4 = data3 & 0x3f;
// 打印验证结果
printf("%#x,%#x,%#x,%#x\n", temp1, temp2, temp3, temp4);
}
注:以上代码为单个3字节转4字节,如数据量较大时,可使用循环进行批量操作
当处理到指定字节数时可对已处理字节数求余的方法进行特殊处理