文章目录

  • MIME概述
  • base64编码
    • 基本原理
    • 具体步骤
    • 例题
  • quoted-printable编码
    • 基本步骤
    • 例题
  • ASCLL字符代码表

MIME概述

电子邮件协议SMTP通过连接建立邮件传送连接释放三个阶段实现发送方和接收方之间的通信。

不过SMTP有很多的缺点:

  1. SMTP不能传送可执行文件或其他的二进制对象。
  2. SMTP限于传送7位的ASCLL码很多非英语语言无法传送。
  3. SMTP服务器会拒绝超过一定长度的邮件。
  4. 某些SMTP的实现并没有完全按照SMTP的互联网标准。如:

    回车、换行的删除和增加
    超过76个字符会截断或者自动换行
    后面多余的空格删除
    将制表符tab转换为若干个空格

提出了通用互联网邮件扩充MIME


MIME继续使用原来的邮件格式,增加了邮件主体的结构,定义了传送非ASCALL码的编码规则。

MIME增加5个新的邮件首部

  1. MIME-Version

    表示使用的MIME的版本号,一般是1.0

  2. Content-Type

    说明邮件主体的数据类型和子类型
    Content-Type都是“主类型/子类型”的形式。主类型有text, image,audio, video, application, multipart, message等,分别表示文本、图片、音频、视频、应用、分段、消息等。

  3. Content-Transfer-Encoding

    在传送邮件主体如何编码的
    Content-Transfer-Encoding共有Base64, Quoted-printable, 7bit, 8bit, Binary等几种。
    使用最广泛的编码方式:Base64, Quoted-Printable。

  4. Content-Disposition

    可读字符串,说明此邮件主体是否是图像、音频或视频

  5. 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

具体步骤

  1. 把二进制代码划为一个个24位长的单元,再把每一个24位单元划分为4个6位组。
  2. 在每组前面添加两个0,每组由6个变为8个二进制位,总共32个二进制位(四个字节)。
  3. 根据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码的数据编码方式:

  1. 每个字节(8位)的二进制用两个十六进制数字表示
  2. 在其前面加上一个等号“=”

例题

试将数据01001100 10011101 00111001进行quoted-printable编码,并得出最后传送的ASCII数据。这样的数据用quoted-printable编码后其编码开销有多大?

  1. 第一步:将二进制分为8位一组,转为十六进制,超过5F不可打印(当然也可直接转化为十进制,超过95不可打印)

    01001100 10011101 00111001
      4C    9D    39

  2. 可打印:不用改变,不可打印:两个十六进制数字前面加上“=”

    01001100 10011101 00111001
      4C    9D    39
      4C    =9D   39

  3. 可打印:不用改变,不可打印:将“=”和两个十六进制数字分别转化为8位二进制(=:00111101)

    4C、39可以打印,9D不可以打印
    =9D:00111101 00111001 01000100

    ASCII数据:

    01001100 00111101 00111001 01000100 00111001

开销:(5-3)/3=66.7%

ASCLL字符代码表

图片来自百度

参考文献:

计算机网络(第7版)-谢希仁

【MIME协议】base64编码与quoted-printable编码相关推荐

  1. java base64编码换行符_Base64编码出现换行符

    概述 Base64是一种字符串编码格式,Base64采用A-Z a-z 0-9 "+" "/"这一共64个字符来编码原始字符(还有垫字符"=" ...

  2. 【音视频零基础入门 1】视频播放器原理、流媒体协议、封装格式、视频编码、音频编码

    [音视频零基础入门 1]视频播放器原理.流媒体协议.封装格式.视频编码 一.视频播放器原理 1.1 解协议 1.2 解封装 1.3 解码 1.4 视音频同步 二.流媒体协议 三.封装格式 四.封装格式 ...

  3. 在线BASE64加密解密、UrlEncode编码/解码、native/ascii在线转换工具 -toolfk程序员工具网

    本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果.Tool ...

  4. 在tcp/ip协议中以BigEndian方式的编码与解码

    2019独角兽企业重金招聘Python工程师标准>>> package com.tcpip;/*** 在tcp/ip协议中以BigEndian方式的编码与解码* @author ** ...

  5. MIME协议及源邮件格式分析

    转载链接:http://wenku.baidu.com/view/7246de671ed9ad51f01df277.html 电子邮件也许是一个Internet上的流行最广泛的应用.也是我们现在的大多 ...

  6. smtp 协议 MIME协议

    简介: SMTP是一种提供可靠且有效的电子邮件传输的协议.SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知.SMTP独立于特定的传输子系统,且只 ...

  7. python字符编码讲解_python 字符编码讲解

    ASCII控制字符  Unicode编码 ASCII(American Standard Code for Information Interchange,美国信息互换标准代码,ASCⅡ)是基于拉丁字 ...

  8. 【Android RTMP】音频数据采集编码 ( 音频数据采集编码 | AAC 高级音频编码 | FAAC 编码器 | Ubuntu 交叉编译 FAAC 编码器 )

    文章目录 安卓直播推流专栏博客总结 一. 音频数据采集.编码 二. AAC 高级音频编码 三. FAAC 编码器 四. Ubuntu 18.04.4 交叉编译 FAAC 编码器 安卓直播推流专栏博客总 ...

  9. ansi编码转换_8b/1b编码是个什么东东

    使用串行比并行总线可以节省更多的布线空间,芯片.电缆等的尺寸可以做得更小,同时传输速率更高.但是,在很多数字系统如CPU.DSP.FPGA等内部,进行数据处理的最小单位都是Byte,即8个bit,如何 ...

最新文章

  1. 解决MYSQL错误:ERROR 1040 (08004): Too many connections
  2. 使用ffmpeg实现转码样例(代码实现)
  3. jQuery的选择器——可见性过滤选择器
  4. JavaWeb学习总结(二)——Tomcat服务器学习和使用(一)
  5. 《P5R》的反派设计有什么可取之处?
  6. MySQL主键的理解
  7. ServletRequestAttributes用法详解——Spring系列学习笔记
  8. 【spring学习】03
  9. 上海中环C位出道,自动驾驶天团横「扫」北上广
  10. 哪些场景应用了dsrc通信标准_如何提高量子通信系统的实用性,制约了量子通信系统的应用场景...
  11. java数据同步视频,Oracle从入门到精通 oracle数据库 全程同步视频教学 内含Oracle Java项目实战教...
  12. Spire.Office for .NET 7.4.10 is released
  13. ios 设置导航栏背景色
  14. xp系统禁止开机启动服务器,Window XP 开机启动超慢,哪些系统服务和进程可以禁用?...
  15. android TV 插入U盘检测
  16. 老人腰腿痛怎么办 传授给你五个小妙招
  17. SQL中附加的基本运算
  18. 英语语法笔记——状语从句(五)
  19. 牛客练习赛56 A-小蒟和他的乐谱
  20. 使用机器人操作系统ROS 2和仿真软件Gazebo 9搭建机器人教程(一)

热门文章

  1. Win7如何查看自己得Win7版本号
  2. 微信小程序的后台在哪里云开发控制台操作方法
  3. 第十一章 性能与可伸缩性(待续)
  4. 新车磨合应该从正确启动发动机开始
  5. SpringBoot的幕后推手,java互联网架构师系统vip课程
  6. java读写word模板_Java操作Word模板插入列表
  7. Hibernate使用原生SQL查询
  8. 解忧云SMS短信发送系统服务平台源码+解密完美版
  9. 好书推荐-——《态度》——吴军老师著
  10. Java实现龟兔赛跑