美文网首页
Https学习(二)- Http中的编码(上)

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

作者: Hoker_ | 来源:发表于2018-11-24 22:58 被阅读0次
    基于自己的学习顺序,现在来理一下Http中的编码,先谈谈平时项目使用很多的Base64算法。

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

    • “01000001”是“A”
    • “01000010”是“B”
    • “01000011”是“C”
      而Base64则就是重新解释了这些二进制数据,以6位对应一个字符的方式来解释,这样原来3个字符就变成了4个字符(83=24,24/6=4),而计算机本身是以8位来描述字符的,这样,对新的4个字符,存到内存就是48=32位,相当于Base64会增大数据量。
    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个。


    “ABC”

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


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

    最后总结一下步骤:

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

    相关文章

      网友评论

          本文标题:Https学习(二)- Http中的编码(上)

          本文链接:https://www.haomeiwen.com/subject/zloyqqtx.html