【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 z1 B 18 S 35 j 52 02 C 19 T 36 k 53 13 D 20 U 37 l 54 24 E 21 V 38 m 55 35 F 22 W 39 n 56 46 G 23 X 40 o 57 57 H 24 Y 41 p 58 68 I 25 Z 42 q 59 79 J 26 a 43 r 60 810 K 27 b 44 s 61 911 L 28 c 45 t 62 +12 M 29 d 46 u 63 /13 N 30 e 47 v14 O 31 f 48 w 15 P 32 g 49 x16 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 01000100ASCII数据:
01001100 00111101 00111001 01000100 00111001
开销:(5-3)/3=66.7%
ASCLL字符代码表
图片来自百度
参考文献:
计算机网络(第7版)-谢希仁
【MIME协议】base64编码与quoted-printable编码相关推荐
- java base64编码换行符_Base64编码出现换行符
概述 Base64是一种字符串编码格式,Base64采用A-Z a-z 0-9 "+" "/"这一共64个字符来编码原始字符(还有垫字符"=" ...
- 【音视频零基础入门 1】视频播放器原理、流媒体协议、封装格式、视频编码、音频编码
[音视频零基础入门 1]视频播放器原理.流媒体协议.封装格式.视频编码 一.视频播放器原理 1.1 解协议 1.2 解封装 1.3 解码 1.4 视音频同步 二.流媒体协议 三.封装格式 四.封装格式 ...
- 在线BASE64加密解密、UrlEncode编码/解码、native/ascii在线转换工具 -toolfk程序员工具网
本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果.Tool ...
- 在tcp/ip协议中以BigEndian方式的编码与解码
2019独角兽企业重金招聘Python工程师标准>>> package com.tcpip;/*** 在tcp/ip协议中以BigEndian方式的编码与解码* @author ** ...
- MIME协议及源邮件格式分析
转载链接:http://wenku.baidu.com/view/7246de671ed9ad51f01df277.html 电子邮件也许是一个Internet上的流行最广泛的应用.也是我们现在的大多 ...
- smtp 协议 MIME协议
简介: SMTP是一种提供可靠且有效的电子邮件传输的协议.SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知.SMTP独立于特定的传输子系统,且只 ...
- python字符编码讲解_python 字符编码讲解
ASCII控制字符 Unicode编码 ASCII(American Standard Code for Information Interchange,美国信息互换标准代码,ASCⅡ)是基于拉丁字 ...
- 【Android RTMP】音频数据采集编码 ( 音频数据采集编码 | AAC 高级音频编码 | FAAC 编码器 | Ubuntu 交叉编译 FAAC 编码器 )
文章目录 安卓直播推流专栏博客总结 一. 音频数据采集.编码 二. AAC 高级音频编码 三. FAAC 编码器 四. Ubuntu 18.04.4 交叉编译 FAAC 编码器 安卓直播推流专栏博客总 ...
- ansi编码转换_8b/1b编码是个什么东东
使用串行比并行总线可以节省更多的布线空间,芯片.电缆等的尺寸可以做得更小,同时传输速率更高.但是,在很多数字系统如CPU.DSP.FPGA等内部,进行数据处理的最小单位都是Byte,即8个bit,如何 ...
最新文章
- 解决MYSQL错误:ERROR 1040 (08004): Too many connections
- 使用ffmpeg实现转码样例(代码实现)
- jQuery的选择器——可见性过滤选择器
- JavaWeb学习总结(二)——Tomcat服务器学习和使用(一)
- 《P5R》的反派设计有什么可取之处?
- MySQL主键的理解
- ServletRequestAttributes用法详解——Spring系列学习笔记
- 【spring学习】03
- 上海中环C位出道,自动驾驶天团横「扫」北上广
- 哪些场景应用了dsrc通信标准_如何提高量子通信系统的实用性,制约了量子通信系统的应用场景...
- java数据同步视频,Oracle从入门到精通 oracle数据库 全程同步视频教学 内含Oracle Java项目实战教...
- Spire.Office for .NET 7.4.10 is released
- ios 设置导航栏背景色
- xp系统禁止开机启动服务器,Window XP 开机启动超慢,哪些系统服务和进程可以禁用?...
- android TV 插入U盘检测
- 老人腰腿痛怎么办 传授给你五个小妙招
- SQL中附加的基本运算
- 英语语法笔记——状语从句(五)
- 牛客练习赛56 A-小蒟和他的乐谱
- 使用机器人操作系统ROS 2和仿真软件Gazebo 9搭建机器人教程(一)