Https学习(二)- Http中的编码(上)

基于自己的学习顺序,现在来理一下Http中的编码,先谈谈平时项目使用很多的Base64算法。

要知道,任何数据在本质上都是二进制数据,也就是"0100011"这样的,之所以能显示为我们看到的现在的文字,是因为人们规定了对各种对二进制数据的解释方法,比如说在ASCII里:

  • “01000001”是“A”
  • “01000010”是“B”
  • “01000011”是“C”
    而Base64则就是重新解释了这些二进制数据,以6位对应一个字符的方式来解释,这样原来3个字符就变成了4个字符(83=24,24/6=4),而计算机本身是以8位来描述字符的,这样,对新的4个字符,存到内存就是48=32位,相当于Base64会增大数据量。
Https学习(二)- Http中的编码(上)_第1张图片
Base64索引表

对照着Base64索引表,我们来做一次运算:

A B C -
ASCII 104 97 10 -
8bit字节 01000001 01000010 01000011 -
6bit字节 010000 010100 001001 000011
对应Base64字符 Q U J D

从例子上可以看到,“ABC”经过Base64变成了“QUJD”。需要说明的是,对二进制数据进行处理,是每 3 个字节一组(如果字节数不能被 3 整除,则用 0 补位),这里是刚好3*8=24能被6整除,所以3个字符只编程4个。


Https学习(二)- Http中的编码(上)_第2张图片
“ABC”

实际代码里“ABC”就转成了“QUJD”,那么对于“ABCD”呢,按之前说的是3个字符为一对,那“t”单独为一对,那最终结果应该是8个。


Https学习(二)- Http中的编码(上)_第3张图片
image.png

再说一下,如果被编码字符长度不是 3 的倍数的时候,则都用 0 代替,对应的输出字符为 =,而不是查表所得的 A。

最后总结一下步骤:

  1. 获取字符串每个字符的 ASCII 码,如果字符数不能被 3 整除,则末尾补 0
  2. 将步骤 1 获取的 ASCII 码转为 8 位 二进制码
  3. 每 6 bits 为一组,对照上面的 base64 索引表,得到编码后的字符串
总结:Base64就是2的6次方,其实质就是用64个字符重新解释二进制数据

你可能感兴趣的:(Https学习(二)- Http中的编码(上))