base64编码计算机网络,【MIME协议】base64编码与quoted-printable编码
文章目錄
MIME概述
base64編碼
基本原理
具體步驟
例題
quoted-printable編碼
基本步驟
例題
ASCLL字符代碼表
MIME概述
電子郵件協議SMTP通過連接建立、郵件傳送、連接釋放三個階段實現發送方和接收方之間的通信。
不過SMTP有很多的缺點:
SMTP不能傳送可執行文件或其他的二進制對象。
SMTP限于傳送7位的ASCLL碼很多非英語語言無法傳送。
SMTP服務器會拒絕超過一定長度的郵件。
某些SMTP的實現并沒有完全按照SMTP的互聯網標準。如:
回車、換行的刪除和增加
超過76個字符會截斷或者自動換行
后面多余的空格刪除
將制表符tab轉換為若干個空格
提出了通用互聯網郵件擴充MIME
MIME繼續使用原來的郵件格式,增加了郵件主體的結構,定義了傳送非ASCALL碼的編碼規則。
MIME增加5個新的郵件首部
MIME-Version
表示使用的MIME的版本號,一般是1.0
Content-Type
說明郵件主體的數據類型和子類型
Content-Type都是“主類型/子類型”的形式。主類型有text, image,audio, video, application, multipart, message等,分別表示文本、圖片、音頻、視頻、應用、分段、消息等。
Content-Transfer-Encoding
在傳送郵件主體如何編碼的
Content-Transfer-Encoding共有Base64, Quoted-printable, 7bit, 8bit, Binary等幾種。
使用最廣泛的編碼方式:Base64, Quoted-Printable。
Content-Disposition
可讀字符串,說明此郵件主體是否是圖像、音頻或視頻
Content-ID
郵件的唯一標識符
了解了MIME基本概況,我們看看兩種使用最廣泛的編碼方式。
base64編碼
對于任意的二進制文件,都可用base64編碼。base64已經成為網絡上常見的傳輸8Bit字節代碼的編碼方式之一。
基本原理
定義一個base62索引表,有字符"A-Z、a-z、0-9、+、/" 64個可打印字符。
6位二進制代碼共有64種不同的值,從0到63,下面是對應表
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
具體步驟
把二進制代碼劃為一個個24位長的單元,再把每一個24位單元劃分為4個6位組。
在每組前面添加兩個0,每組由6個變為8個二進制位,總共32個二進制位(四個字節)。
根據base64編碼對照表獲得對應的值。
例題
試將數據 11001100 10000001 00111000進行base64編碼,并得到最后傳輸的ASCII數據。
第一步:正好是24位長,分為4個6位組
110011 001000 000100 111000
第二步:在每組前面添加兩個0
00110011 00001000 00000100 00111000
51 ???8 ????4 ????56
第三步:根據base64編碼對照表獲得對應的值。
00110011 00001000 00000100 00111000
51 ???8 ????4 ????56
z ????I ????E ????4
第四步:找出對應的二進制值
z -> 122 -> 01111010
I -> 73 -> 01001001
E -> 69 -> 01000101
4 -> 52 -> 00110100
quoted-printable編碼
這種方法適用于所傳送的數據中只有少量的非ASCLL碼
ASCII編碼是7位編碼,一共可以組成128個不同的ASCII碼,其中可以打印的有95個(95個中包括了空格),還有33個控制字符不可打印。
基本步驟
可以打印的ASCLL碼,不變
等號“=”和不可打印的ASCLL碼以及非ASCLL碼的數據編碼方式:
每個字節(8位)的二進制用兩個十六進制數字表示
在其前面加上一個等號“=”
例題
試將數據01001100 10011101 00111001進行quoted-printable編碼,并得出最后傳送的ASCII數據。這樣的數據用quoted-printable編碼后其編碼開銷有多大?
第一步:將二進制分為8位一組,轉為十六進制,超過5F不可打印(當然也可直接轉化為十進制,超過95不可打印)
01001100 10011101 00111001
4C ???9D ???39
可打印:不用改變,不可打印:兩個十六進制數字前面加上“=”
01001100 10011101 00111001
4C ???9D ???39
4C ???=9D ??39
可打印:不用改變,不可打印:將“=”和兩個十六進制數字分別轉化為8位二進制(=:00111101)
4C、39可以打印,9D不可以打印
=9D:00111101 00111001 01000100
ASCII數據:
01001100 00111101 00111001 01000100 00111001
開銷:(5-3)/3=66.7%
ASCLL字符代碼表
圖片來自百度
參考文獻:
計算機網絡(第7版)-謝希仁
總結
以上是生活随笔為你收集整理的base64编码计算机网络,【MIME协议】base64编码与quoted-printable编码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SVN提交错误:系统找不到指定路径
- 下一篇: C语言维特比算法,viterbi维特比算