分类 默认 下的文章

[TOC]

第 1 章 了解 Web 及网络Network基础Base

1.1 使用 HTTP 协议访问 Web

1.2 HTTP 的诞生

1.3 网络基础 TCP/IP

1.4 与 HTTP 关系密切的协议:IP、TCP 和 DNS

1.5 负责域名解析的 DNS

1.6 各种协议与 HTTP 协议之间的关系

1.7 URI 和 URL

简单的 HTTP 协议

第 2 章 简单的 HTTP 协议

2.1 HTTP 协议用于客户端和服务Services端之间的通信

2.2 通过请求Request和相应的交换达成通信

2.3 HTTP 是不保存状态的协议

2.4 请求 URI 定位资源

2.5 告知服务器意图的 HTTP 方法

2.6 使用方法下达命令

2.7 持久连接节省通信量

2.7.1 持久连接

2.7.2 管线化

2.8 使用 Cookie 的状态管理

第 3 章 HTTP 报文内的 HTTP 信息

第 4 章 返回结果的 HTTP 状态码

4.1 状态码高中从服务端返回的请求结果

4.2 2XX 成功

4.2.1 200 OK

4.2.2 204 No Content

4.2.3 206 Partial Content

4.3 3XX 重定向

4.3.1 301 Moved Permanently

4.3.2 302 Found

4.3.3 303 See Other

4.3.4 304 Not Modified

4.3.5 307 Temporary Redirect

4.4 4XX 客户端错误

4.4.1 400 Bad Request

4.4.2 401 Unauthorized

4.4.3 403 Forbidden

4.4.4 404 Not Found

4.5 5XX 服务器错误

4.5.1 500 Internal Server Error

4.5.2 503 Service Unaviable

第 5 章 与 HTTP 协作的 Web 服务器

第 6 章 HTTP 首部

6.1 HTTP 报文首部

6.2 HTTP 首部字段

6.2.1 HTTP 首部字段传递重要信息

6.2.2 HTTP 首部字段结构

6.2.3 4 种 HTTP 首部字段类型

6.2.4 HTTP/1.1 首部字段一览

6.2.5 非 HTTP/1.1 首部字段

6.2.6 End-to-end 首部和 Hop-by-hop 首部

6.3 HTTP/1.1 通用首部字段

6.3.1 Cache-Control

6.3.2 Connection

6.3.3 Date

6.3.4 Pragma

6.3.5 Trailer

6.3.6 Transfer-Encoding

6.3.7 Upgrade

6.3.8 Via

6.3.9 Warning

6.4 请求首部字段

6.4.1 Accept

6.4.2 Accept-Charset

6.4.3 Accept-Encoding

6.4.4 Accept-Language

6.4.5 Authorization

6.4.6 Expect

6.4.7 From

6.4.8 Host

6.4.9 If-Match

6.4.10 If-Mofied-Since

6.4.11 If-None-Match

6.4.12 If-Range

6.4.13 If-Unmodified-Since

6.4.14 Max-Forwards

6.4.15 Proxy-Authorization

6.4.16 Range

6.4.17 Refer

6.4.18 TE

6.4.19 User-Agent

6.5 响应首部字段

6.5.1 Accept-Range

6.5.2 Age

6.5.3 ETag

6.5.4 Location

6.5.5 Proxy-After

6.5.6 Server

6.5.7 Vary

6.5.8 WWW-Authenticate

6.6 实体首部字段

6.6.1 Allow

6.6.2 Content-Encoding

6.6.3 Content-Language

6.6.4 Content-Length

6.6.5 Content-Location

6.6.6 Content-MD5

6.6.7 Content-Range

6.6.8 Content-Type

6.6.9 Expires

6.6.10 Last-Modified

6.7 为 Cookie 服务的首部字段

6.7.1 Set-Cookie

6.7.2 Cookie

6.8 其他首部字段

6.8.1 X-Frame-Options

6.8.2 X-XSS-Protection

6.8.3 DNT

6.8.4 P3P

第 7 章 确保 Web 安全的 HTTPS

第 8 章 确认访问用户身份的认证

第 9 章 基于 HTTP 的功能追加协议

第 10 章 构建 Web 内容的技术

第 11 章 Web 的攻击技术

http://graphics.stanford.edu/~monzy/DramainthePhD.mp3

So Much Drama in the PhD 出自 MonzyYo,

MC Plus Plus, my rhymes are so phat,
MC 棒棒,我的节奏酷毙了
I'm PSPACE-complete but I'll reduce you to 3-SAT.
我图灵完备,但是解决不了3-SAT

(PSPACE是计算复杂度理论中能被确定型图灵机利用多项式空间解决的判定问题集合,是Polynomial SPACE的简称。)
(3-SAT问题:
给定一系列的布尔变量x_1,x_2,...
x_n文字(Literal)定义为每个变量的是与否,
比如x_1的就是x_1和 NOT x_1
在3-SAT问题中,子句(Clause)定义为三个文字(Literal)合并Merge到一起的运算,例如
(x_1 OR (NOT x_2) OR x_3)
那么最后3-SAT的表达式就是一系列这样的子句(Clause)合并到一起的运算,例如:
(x_1 OR (NOT x_2) OR x_3) AND (x_4 OR x_5 OR (NOT x_6)) AND ....
3-SAT的表述就是能否找到这样的一系列x_1,x_2,...x_n
使得如上形式的式子得到的是TRUE,如果是则是满足的(satisfied),否则不是。)

My crew is so hard that we roll in NP,
我们是这么幸苦地在NP中翻滚

(NP类问题:所有的非确定性多项式时间可解的判定问题构成NP类问题。非确定性算法:非确定性算法将问题分解成猜测和验证两个阶段。算法的猜测阶段是非确定性的,算法的验证阶段是确定性的,它验证猜测阶段给出解的正确性。设算法A是解一个判定问题Q的非确定性算法,如果A的验证阶段能在多项式时间内完成,则称A是一个多项式时间非确定性算法。有些计算问题是确定性的,例如加减乘除,只要按照公式推导,按部就班一步步来,就可以得到结果。但是,有些问题是无法按部就班直接地计算出来。比如,找大质数的问题。有没有一个公式能推出下一个质数是多少呢?这种问题的答案,是无法直接计算得到的,只能通过间接的“猜算”来得到结果。这也就是非确定性问题。而这些问题的通常有个算法,它不能直接告诉你答案是什么,但可以告诉你,某个可能的结果是正确的答案还是错误的。这个可以告诉你“猜算”的答案正确与否的算法,假如可以在多项式(polynomial)时间内算出来,就叫做多项式非确定性问题。)

And bitches dereference my pointer for free.
婊子们复引用ref了我的指针让它们跑掉

When I'm linear probing they're like, "Damn that's gigantic,"
当我线性逼近它们本来的样子的时候,妈的,那数字真大

I showed it to your mom and she used Hoare semantics.
我把它展示给你地妈妈,她以前是如此得霍尔语义

霍尔语义
霍尔逻辑(Floyd-Hoare Logic)便是一种典型的建立在谓词逻辑基础Base上的公理语义。 在它的基础上,我们可以在程序代码和谓词逻辑公式之间,建立起等语义关系的转化,从而确保我们的验证结果是有效的。
霍尔逻辑核心概念是霍尔三元组(Hoare Tuple),以及对应的推理规则。

She jumped like JNE
她跳得就像JNE

jne是一个条件转移指令

up onto my erection
跳上我的竖立物
And I picked up that ho like straight garbage collection.
我啥啥就像直接得垃圾收集
("That's right, mark-and-sweep on these nuts, bitch.")
那是对的,标记然后清理这些疯子,婊子
My lyrics get stolen by sucker MCs,
我的歌词被傻逼MC们偷走了
I gotta sign my rhymes with PGP;
我就对我的韵律使用了 PGP

PGP(英语:Pretty Good Privacy,中文翻译“优良保密协议”)是一套用于消息加密、验证的应用程序,采用IDEA的散列算法作为加密与验证之用

But I keep on generatin' like a

'Cause there's so much drama in the PhD.

What's wrong MC Plus Plus, am I making you nervous?

Even skanky fat hoes give you denial of service.

You'll probably go to jail before you write your dissertation

So prepare your asshole for some internal fragmentation;

Penetration, as they fill it up with jism, It's too bad you aren't closed under homomorphism. Your problem, Plus Plus, is that your typing isn't strict: In ML my type is real and your type is 'a dict. I control my flow better than TCP, I rep the west coast like Eazy-E, You best not front if you can't pass the GRE, 'Cause there's so much drama in the PhD. My flow is so intense that I will overflow your buffer, Corrupt your stack pointer makin' all your data suffer. I've got saturated edges but your flow is sparser, Real gangstas sip on Yacc; instead you generate a parser. While you're busy poppin' stacks I'll pop a cap in your skull, While you smoke your crack pipe I'm gonna pipe you to /dev/null. I may not have a label but I rap like a star; I'm an unsigned long int and you're an 8-bit char. Your mom circulates like a public key, Servicing more requests than HTTP. She keeps all her ports open like Windows ME, Oh, there's so much drama in the PhD.DWORD to your moms, I came to drop bombs; I've got more rhymes that San Jose's got dotcoms. I rep the Farm like 50 reps Queens, With more power than multitape Turing Machines. Blowin' up the rap scene faster than factorial functions, I'm dope like PNP transistors and I'll saturate your junctions. By the time you've rhymed one line, I've already busted ten; You rap in exponential time and I'm big-O of log(n). I run gmake and gcc, And I ain't never called malloc without calling free. I'll beat your ass until it's colored like a red-black tree 'Cause there's so much drama in the PhD.

白皮书、蓝皮书、绿皮书、黄皮书、褐皮书

现代汉语词典注释:
政府、议会等公开发表的有关政治、经济、外交等重大问题的文件,封面为白色所以叫白皮书。由于内容或习惯不同也会用其它颜色,如蓝皮书等。
“皮书”,是万文丛中的一丛花,白的、蓝的、绿的、黄的、红的......
皮书相对于一般的普通报告具有原创首发、专业权威、连续推出等特点。
皮书主要指官方或社会组织等正式发表的重要文件或报告。

关注经济或社会领域的人或会发现,在每年的岁末年初都会有一系列权威研究报告组成,对年度有关中国与世界的经济、社会等各个领域的现状和发展态势进行分析和预测,我们通常管这种发布的东西叫做“皮书”。

  • 白皮书:是由官方制定发布的阐明及执行的规范报告。
  • 蓝皮书:是由第三方完成的综合研究报告。
  • 绿皮书:是关于乐观前景的研究报告。
  • 红皮书:是关于危机警示的研究报告

    白皮书

    白皮书最初是因为书的封皮和正文所用的级皆为白色而得名。英语中“WHITE PAPER”和“WHITE BOOK”汉语均译做白皮书。但两者是有区别的。在英国,“WHITE PAPER”主要指政府发表的短篇幅报告。任何题材、任何组织机构均可使用,亦可用于包含背景材料的政治性官方声明。
    “WHITE BOOK”篇幅较长,内容更为重要和充实,主要是有关重大事务的一种官方报告书。除英国外,其他国家在使用“WHITE BOOK”和“WHITE PAPER”时,往往未加严格区分。英国1965年4月用“WHITE BOOK”的形式发表了《关于直布罗陀问题的白皮书》,书名用白皮书,封皮也用白色。

    蓝皮书

    蓝皮书用于官方文件时,主要指英国议会的一种出版物。因封皮是蓝色,故名。开始发行于1681年,自1836年才公开出售。其名称是《英国议会文书》,是英国政府提交Commit议会两院的一种外交资料和文件。
    有一类外文称为蓝皮书的,并不 怕事于什么官方文件。从内容看,乃系名人录、指南、手册之类的工具书,甚至包括纪念画册。如美国政府官员名录、社会名人录、国务院每月发行的驻美外交人员衔名录,以及美国一些大学做试题答案用的小册子也称蓝皮书(汉语可译为蓝皮簿)。此外,1915年在美国旧金山举行的巴拿马太平洋万国博览会出版过一本纪念画册,1947年菲律宾建国一周年时出版的纪念画册,封皮均用蓝色,都冠以蓝皮书的名称。

    红皮书

    使用红皮书的国家主要有西班牙、奥地利、英国、美国、土耳其、苏联等。有的用于官方文件,有的用于非官方文件。西班牙于1965年、1968年先后发表《关于直布罗陀问题的红皮书》(英文版)。英国早在13世纪就有用财政方面的红皮书。英国的红皮书还用于官员名册、贵族名录和宫廷指南,并于1969年出版一本《红皮书》,副标题是《野生动物濒危》。美国1977年出版《关于危险品运输的红皮书》。苏联1984年初首次出版了有关保护野生生物和需要保护的植物。此外,有的国际组织亦使用红皮书,如《国际电信联盟红皮书》。当然最有名、发行量最大的“经红皮书”莫过于六七十年代的《毛主席语录》——“红宝书”。

    黄皮书

    黄皮书过去被泛指旧中国和法国等政府发表的重要报告书,因为习惯上使用黄色封皮,故有此名。
    19世纪末,法国有一本黄皮书,内容是有关 法国与中国就修筑滇越铁路进行的交涉。1971年台湾《中国月刊》社用私人署名发行过一本《中美关系黄皮书》,封皮也是黄皮书,并非官方文件,乃是一种活页的美国国会议会住址簿。

    绿皮书

    意大利、墨西哥、英国和1947年以前印度发表的一种官方文件,有的称为绿皮书(GREEN BOOK)。
    美国出版的华盛顿社交名册,封皮是绿色。利比亚自1976年起陆续出版一种《绿皮书》,这是卡扎菲提出《世界第三种理论》的专题著作。此外,还有一种“GREEN PAPER”也被译做绿皮书,是一国政府发表的一种绿色封皮的报告书,载有正在酝酿中的、尚未被政府采纳的建议。
    此外,匈牙利1949年曾发行《公审明曾蒂》一书,匈文版和俄文版均自称是黑皮书,封皮是黑色,标题用黄色字,而该书的英、法文版则自称为黄皮书。以色列1967年亦使用黑皮书,为国际上所罕见。因为“BLACK BOOK”在英语中通常是指“黑名单”或“记过簿”,所以英语国家避免使用黑皮书。
    ●一国政府或议会正式发表的重要文件或报告书的封面有它惯用的颜色,白色的叫白皮书(如葡萄牙),蓝色的叫蓝皮书(如英国),红色的叫红皮书(如西班牙),黄色的叫黄皮书(如法国),绿色的叫绿皮书(如意大利),因而白皮书、蓝皮书等往往成为某些国家的官言文书的代号。但事实上,一国使用的颜色不限于一种。
    http://junelover.bokee.com/viewdiary.11488666.html

    美国褐皮书解释

    a.美国联邦储备银行(FED)每6至8周公布经济现况摘要,公布时间约在联邦公开市场委员会(FOMC)政策会议前2周。取名 “褐皮书”系因装订镶边颜色属褐色,该报告包含12地区FED分行所提出的地区经济情况摘要与全国经济情况摘要。 b.目前,各分行轮流将地区报告汇总成全国经济情况摘要。但至1997年初,将不再采用轮流方式改以随机Random抽取方式决定。 c.褐皮书对FED决策人士属有价值的工具。该报告提供经济变化的实时证据,该变化系单纯统计数据所无法衡量。 d. FED并未要求分行提出特别项目。各分行报告通常包含零售业、制造业、农业与银行业。大多数分行亦提及地区劳工市场,薪资与物价压力。

 蓝皮书则通常代表学者的观点或研究团队的学术观点。国际上第一本蓝皮书是英国议会发行于1681年,自1836年公开出售的《英国议会文书》。在中国,最常见的是中国社科院推出的综合研究报告系列蓝皮书。

  红皮书主要是西班牙、英国、美国、土耳其等国家使用。根据各国使用习惯不同,用途也会有所不一样。比如,英国最早可以追溯到13世纪,曾推出过财政方面的红皮书;西班牙政府发布的红皮书则大多是正式发表的重要文件或报告;也有一些关于危机警示的研究报告以红皮书的形式推出。

  中国人最为熟悉的“红皮书”或是六七十年代的《毛主席语录》。

  绿皮书通常是政府为向国民征询意见时的一种手段。在英联邦国家或曾被英国统治的地方,政府在准备推行一项比较重要的政策之前通常会先发一份绿皮书征集意见,再经过修订后以白皮书的形式公布。

  黄皮书主要是和世界经济、国际问题研究有关的报告。中国比较熟悉的有中国社会科学院发表的关于世界经济、政治研究的系列报告;国际通用的黄皮书则是世界卫生组织为保障入出国(边)境人员的人身健康而发布的《国际预防接种证书》。

  比较鲜为人知的有灰皮书。这是上世纪六七十年代中国特有的一个词汇。主要指1963年中国作家出版社出版了一批所谓"供内部参考批判"的书籍,大多是西方文学作品,包括《 麦田的守望者》《基督山伯爵》等多部名著,在文革期间这些书地下流传,成为“地下文学”主要的启蒙源泉之一。称之为灰皮书主要是因为,这些书的封面大多是灰色的。

  还有褐皮书,顾名思义,取名 "褐皮书"是因为该报告装订镶边的颜色是褐色。特指美国联邦储备委员会(FED)每年发布的美国经济展望调查报告。

  怎样才可以称之为“皮书”?

  目前虽然对于皮书的颜色、内容并没有明确的规定,但通常来说,能够成为被大家熟知且认可的皮书需要具备以下四个条件:

  第一,必须是资讯类产品。皮书并不是供普通大众传阅的读物,而主要针对有一定专业知识的群体,包括企业管理者、党政事业干部,或者咨询公司等。专业性较强,是具有较强实用性的资讯类文件。

  第二,周期性推出的出版物。皮书大多都是系列发表的刊物,通常以一年为单位。

  第三,产品的论域必须是某个特定的地域或领域。也就说无论是宏观,还是微观,无论是针对总体现象产生还是针对一件事而产生,在论述过程中,都要以某学科或行业内部横向或纵向的空间分布为起点,按某一事件Event、任务或时间的顺序来分配。

  第四,必须使用社会科学的视角和方法。无论皮书研究的是哪个领域的内容,为使其具有一定的客观权威性,皮书的作者必须用社会科学的定量方法,比如模型、个案、统计、问卷等方式处理对象。(张文晖)

今天是 2021 年 01 月 20 日,距离上一个大寒腊八重合,已经过去十九年了,而我,也已经有十九周岁了,农历二十岁,发生了很多很多的事情,从开始的新冠,到我分手,然后被开除,再然后上大学,总之发生了很多很多很多的事情。

Base64

[TOC]
Base64 是网络Network上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看 [RFC2045][RFC2045]、[RFC2046][RFC2046]、[RFC2047][RFC2047]、[RFC2048][RFC2048]、[RFC2049][RFC2049],上面有 MIME 的详细规范。
Base64 编码是从二进制到字符的过程,可用于在 HTTP 环境下传递较长的标识信息。采用 Base64 编码具有不可读性,需要解码后才能阅读。
Base64 由于以上优点被广泛应用于计算机的各个领域,然而由于输出内容中包括两个以上“符号类”字符(+, /, =),不同的应用场景又分别研制了 Base64 的各种“变种”。为统一和规范化 Base64 的输出, Base62x 被视为无符号化的改进版本。

简介

标准的 Base64 并不适合直接放在URL里传输,因为 URL 编码器会把标准 Base64 中的/+字符变为形如%XX的形式,而这些%号在存入数据库时还需要再进行转换,因为 ANSI SQL 中已将%号用作通配符。
为解决此问题,可采用一种用于 URL 的改进 Base64 编码,它在末尾填充=号,并将标准 Base64 中的+/分别改成了-_,这样就免去了在 URL 编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。
另有一种用于正则表达式的改进 Base64 变种,它将+/改成了!-,因为+,*以及前面在 IRCu 中用到的[]在正则表达式中都可能具有特殊含义。
此外还有一些变种,它们将+/改为_-._(用作编程语言中的标识符名称)或.-(用于 XML 中的 Nmtoken )甚至_:(用于 XML 中的 Name )。
Base64 要求把每三个 8Bit 的字节转换为四个 6Bit 的字节(3*8 = 4*6 = 24),然后把 6Bit 再添两位高位 0,组成四个 8Bit 的字节,也就是说,转换后的字符串理论上将要比原来的长 1/3。

应用

Mozilla Thunderbird和Evolution用Base64来保密电子邮件密码
Base64 也会经常用作一个简单的“加密”来保护某些数据,而真正的加密通常都比较繁琐。
垃圾讯息传播者用Base64来避过反垃圾邮件工具,因为那些工具通常都不会翻译Base64的讯息。
在LDIF档案,Base64用作编码字串。

规则

关于这个编码的规则:

  1. 把 3 个字节变成 4 个字节。
  2. 每 76 个字符加一个换行符。
  3. 最后的结束符也要处理。

    例子1

    转换前 111111111111111111111111 (二进制)
    转换后 00111111001111110011111100111111 (二进制)
    上面的三个字节是原文,下面的四个字节是转换后的 Base64 编码,其前两位均为 0。
    转换后,我们用一个码表来得到我们想要的字符串(也就是最终的 Base64 编码),这个表是这样的:(摘自 [RFC2045][RFC2045] )
    转换表

    Table 1: The Base64 Alphabet

    索引Index 对应字符 索引 对应字符 索引 对应字符 索引 对应字符
    0 A 17 R 34 i 51 z
    1 B 18 S 35 j 52 0
    2 C 19 T 36 k 53 1
    3 D 20 U 37 l 54 2
    4 E 21 V 38 m 55 3
    5 F 22 W 39 n 56 4
    6 G 23 X 40 o 57 5
    7 H 24 Y 41 p 58 6
    8 I 25 Z 42 q 59 7
    9 J 26 a 43 r 60 8
    10 K 27 b 44 s 61 9
    11 L 28 c 45 t 62 +
    12 M 29 d 46 u 63 /
    13 N 30 e 47 v
    14 O 31 f 48 w
    15 P 32 g 49 x
    16 Q 33 h 50 y

    例子2

    转换前 101011011011101001110110
    转换后 00101011000110110010100100110110
    十进制 43 27 41 54
    对应码表中的值 r b p 2
    所以上面的 24 位编码,编码后的 Base64 值为 rbp2
    解码同理,把 rbq2 的二进制位连接上再重组得到三个 8 位值,得出原码。
    (解码只是编码的逆过程,有关 MIME 的 RFC 还有很多,如果需要详细情况请自行查找。)

    • 第一个字节,根据源字节的第一个字节处理。
      规则:源第一字节右移两位,去掉低 2 位,高 2 位补零。
      既:00 + 高6位
    • 第二个字节,根据源字节的第一个字节和第二个字节联合处理。
      规则如下,第一个字节高6位去掉然后左移四位,第二个字节右移四位
      即:源第一字节低2位 + 源第2字节高4位
    • 第三个字节,根据源字节的第二个字节和第三个字节联合处理,
      规则第二个字节去掉高4位并左移两位(得高6位),第三个字节右移6位并去掉高6位(得低2位),相加即可
    • 第四个字节,规则,源第三字节去掉高2位即可
      //用更接近于编程的思维来说,编码的过程是这样的:
      // 第一个字符通过右移2位获得第一个目标字符的Base64表位置,根据这个数值取到表上相应的字符,就是第一个目标字符。
      // 然后将第一个字符与0x03(00000011)进行与(&)操作并左移4位,接着第二个字符右移4位与前者相或(|),即获得第二个目标字符。
      // 再将第二个字符与0x0f(00001111)进行与(&)操作并左移2位,接着第三个字符右移6位与前者相或(|),获得第三个目标字符。
      // 最后将第三个字符与0x3f(00111111)进行与(&)操作即获得第四个目标字符。
      // 在以上的每一个步骤之后,再把结果与 0x3F 进行 AND 位操作,就可以得到编码后的字符了。

      原文的字节数量应该是 3 的倍数,如果这个条件不能满足的话,具体的解决办法是这样的:原文剩余的字节根据编码规则继续单独转 (1变2,2变3;不够的位数用0补全),再用=号补满 4 个字节。这就是为什么有些 Base64 编码会以一个或两个等号结束的原因,但等号最多只有两个。因为一个原字节至少会变成两个目标字节,所以余数任何情况下都只可能是 0,1,2 这三个数中的一个。如果余数是 0 的话,就表示原文字节数正好是 3 的倍数(最理想的情况)。如果是 1 的话,转成 2 个 Base64 编码字符,为了让 Base64 编码是 4 的倍数,就要补 2 个等号;同理,如果是 2 的话,就要补 1 个等号。

      原理

      转码过程例子:
      3*8=4*6
      内存 1 个字节占 8 位
      转前: s 1 3
      先转成ascii:对应 115 49 51
      2 进制: 01110011 00110001 00110011
      6 个一组(4 组) 011100110011000100110011
      然后才有后面的 011100 110011 000100 110011
      然后计算机一个字节占 8 位,不够就自动补两个高位0了
      所以有了高位补 0
      科学计算器输入 00011100 00110011 00000100 00110011
      得到 28 51 4 51
      查下对照表 c z E z

[RFC2045]: https://tools.ietf.org/html/rfc2045 "Multipurpose Internet Mail Extensions
(MIME) Part One:
Format of Internet Message Bodies"
[RFC2046]: https://tools.ietf.org/html/rfc2046 "Multipurpose Internet Mail Extensions
(MIME) Part Two:
Media Types"
[RFC2047]: https://tools.ietf.org/html/rfc2047 "Multipurpose Internet Mail Extensions
(MIME) Part Three:
Message Header Extensions for Non-ASCII Text"
[RFC2048]: https://tools.ietf.org/html/rfc2048 "Multipurpose Internet Mail Extensions
(MIME) Part Four:
Registration Procedures"
[RFC2049]: https://tools.ietf.org/html/rfc2049 "Multipurpose Internet Mail Extensions
(MIME) Part Five:
Conformance Criteria and Examples"