毕业设计(论文)-E-mail客户端管理程序的设计与实现.doc

上传人:西安人 文档编号:3281237 上传时间:2019-08-07 格式:DOC 页数:48 大小:658.04KB
返回 下载 相关 举报
毕业设计(论文)-E-mail客户端管理程序的设计与实现.doc_第1页
第1页 / 共48页
毕业设计(论文)-E-mail客户端管理程序的设计与实现.doc_第2页
第2页 / 共48页
毕业设计(论文)-E-mail客户端管理程序的设计与实现.doc_第3页
第3页 / 共48页
毕业设计(论文)-E-mail客户端管理程序的设计与实现.doc_第4页
第4页 / 共48页
毕业设计(论文)-E-mail客户端管理程序的设计与实现.doc_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《毕业设计(论文)-E-mail客户端管理程序的设计与实现.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)-E-mail客户端管理程序的设计与实现.doc(48页珍藏版)》请在三一文库上搜索。

1、河南理工大学毕业设计(论文)说明书 I 摘摘 要要 电子邮件(E-mail)服务作为 Internet 上应用最多和最广的服务项目,在网络 中起到非常重要的作用。如同其他的网络服务,电子邮件系统也有其使用的传 输协议,包括简单邮件传输协议 (SMTP, Simple Mail Transfer Protocol)、邮局 协议(POP, Post Office Protocol)等这些应用于电子邮件发送和接收的协议。 首先我们设计了 E-mail 客户端管理程序的总体框架,在不打开用户邮箱主 页情况下,可以实现接收邮箱中的邮件及向其他邮箱发送信件的功能;其次以 SMTP、POP3 协议为研究对象

2、,按照 SMTP、POP3 协议通过套接字发送 SMTP、POP3 命令,并使用 MD5 散列算法进行加密传输,接收并处理邮件服 务器的反馈信息;然后利用在 Microsoft Visual Studio .NET 2003 编程环境下实 现 SMTP、POP3 协议的功能,开发出一个既简单又实用的具有发送和接收功 能的 E-mail 客户端程序;最后,通过实测表明,本论文开发出的 E-mail 客户 端程序达到了预期设计的目标。 关键词关键词:SMTP/POP3 协议,MD5 散列算法,邮件客户端 河南理工大学毕业设计(论文)说明书 II Abstract E-mail service as

3、 the most widely used in the Internet and the most extensive services in the network play a very important role. As with other network services, e- mail system also has the use of transmission protocols, including Simple Mail Transfer Protocol (SMTP), Post Office Protocol (POP) and so they used the

4、protocol to send and receive e-mail. First, we designed the E-mail client the overall framework of management procedures, without opening the home page under the users mailbox, the mailbox can be achieved to receive mail and send letters to other mail functions; followed by the SMTP, POP3 protocol f

5、or the study, in accordance with the SMTP, POP3 protocol through a socket to send SMTP, POP3 commands, and use the MD5 hashing algorithm to encrypt transmission, receiving and processing feedback from the mail server; then use the Microsoft Visual Studio. NET 2003 programming environment to achieve

6、SMTP, POP3 protocol functions, developed a simple and practical E-mail client program with sending and receiving; finally, the test shows that the thesis developed E-mail client program to achieve the desired design goals. Keywords: SMTP/POP3 protocols, MD5 hashing algorithm, E-mail client 河南理工大学毕业设

7、计(论文)说明书 III 目目 录录 第一章第一章 前前 言言 1 1.1 论文背景1 1.2 开发背景 .1 1.3 开发环境及运行环境 .2 1.3.1 开发环境 .2 1.3.2 运行环境 .2 第二章第二章 相关理论相关理论 3 2.1 SMTP .3 2.1.1 SMTP 协议简介及工作原理 .3 2.1.2 SMTP 设计方案 .5 2.2 POP3 .7 2.2.1 POP3 协议简介及工作原理 .7 2.2.2 POP3 设计方案 .9 2.3 电子邮件 10 2.3.1 电子邮件与普通信件传送过程的区别 10 2.3.2 电子邮件格式 10 2.4 MD5 散列算法.13 第

8、三章第三章 系统设计系统设计 15 3.1 系统架构设计 15 3.2 框架资源设计 15 3.3 系统代码设计 15 3.3.1 MD5 散列算法设计 .15 3.3.2 SMTP 客户端设计 19 3.3.3 POP3 客户端设计 31 第四章第四章 系统测试系统测试 37 4.1 系统界面 37 河南理工大学毕业设计(论文)说明书 IV 4.2 系统测试 39 4.2.1 向 SMTP 服务器发送邮件 .39 4.2.2 从 POP3 服务器收取邮件 .40 第五章第五章 结论结论 41 致致 谢谢 42 参考文献参考文献 43 河南理工大学毕业设计(论文)说明书 1 第一章第一章 前前

9、 言言 1.11.1 论文背景论文背景 目前由于电子邮件广泛而频繁的使用,国内外各大网站都提供了电子邮件 服务,而且有些是免费服务。人们日常使用的电子邮件有很多,但就方式来说 只有两种。第一种是在网站上使用电子邮件,也就是一般所说的 Web 使用方 式,通常人们使用时必须首先登录到网页邮件(WebMail)服务器,通过身份验 证后才可以查阅收发邮件。但是用户不能总是处于登录状态,也不能每时每刻 发送接收邮件。如果长时间没有对 WebMail 服务器进行操作,则被认为登录 超时,自动退出系统。用户需要再次登录邮件服务器,才可以进行操作。由于 频繁的登录填写账户和密码,造成了用户对电子邮件的使用产

10、生不便。这时出 现一种不需要访问 Web 页面,只需要您在本地机器上使用电子邮件的相关软 件,就可以直接收发、管理电子邮件。它既能支持全部的 Internet 电子邮件功 能,又能改正 WebMail 服务器使用的种种缺点,方便用户发送接收邮件。 流行的电邮客户端包括 Microsoft Outlook、Outlook Express、Foxmail 等。 不同类型的客户端一般都有以下四个基本功能: (1)以邮件标头的形式呈现您邮箱中的所有邮件。标头包括发件人和邮 件主题,还可能包含邮件的发送时间、日期以及邮件大小。 (2)用户可以点选标头,阅读相应邮件。 (3)用户可新建并发送邮件。写信时要

11、输入收件人地址、邮件主题和内 容。 (4)用户可以在发送邮件时添加附件,也可保存来信中的附件。 高级的电子邮件客户端可能有许多其他功能,但以上这四个基本功能是所 有电子邮件客户端的核心。 河南理工大学毕业设计(论文)说明书 2 1.21.2 开发背景开发背景 当前流行的几大邮件客户端软件除了具有最常用的收发信件功能之外,越 来越复杂,而人们平时真正用到的功能很单一,很多功能(尤其对于那些计算 机知识相对缺乏的人来说)显得太过于华丽深奥,不太注重实用,而且相对占 用比较多的系统资源。有鉴于此,在查询了解 RFC 底层协议之后,我们简化 了很多不必要的功能,开发了这个功能相对既简单又实用的邮件客户

12、端管理程 序。 1.31.3 开发环境及运行环境开发环境及运行环境 1.3.1 开发环境 Windows 7 旗舰版 32 位(DirectX 11) Microsoft Visual Studio 2005(C+) Microsoft Visual Studio .NET 2003 1.3.2 运行环境 此邮件客户端运行在 Windows 2000 或以上操作系统平台、并且安装有 Microsoft .NET Framework 1.0 或者以上版本。 河南理工大学毕业设计(论文)说明书 3 第二章第二章相关理论相关理论 2.12.1 SMTPSMTP 邮件发送功能的实现,必然会涉及到简单邮

13、件传输协议 (SMTP, Simple Mail Transfer Protocol)。SMTP 被用来在因特网上发送邮件,该协议规定了一 些基本的命令和方法使客户端与服务器进行交互,以达到发送邮件的目的。 2.1.1 SMTP 协议简介及工作原理 (1) SMTP 协议简介 SMTP 的目标是可靠高效地传送邮件,它独立于传送子系统而且仅要求一 条可以保证传送数据单元顺序的通道。 SMTP 设计基于以下通信模型:针对用户的邮件请求,发送 SMTP 建立与 接收 SMTP 之间建立一个双向传送通道。接收 SMTP 可以是最终接收者也可以 是中间传送者。SMTP 命令由发送 SMTP 发出,由接收

14、 SMTP 接收,而应答则 反方面传送。 一旦传送通道建立,SMTP 发送者发送 MAIL 命令指明邮件发送者。如果 SMTP 接收者可以接收邮件则返回 OK 应答。SMTP 发送者再发出 RCPT 命令 确认邮件是否接收到。如果 SMTP 接收者接收,则返回 OK 应答;如果不能接 收到,则发出拒绝接收应答(但不中止整个邮件操作) ,双方将如此重复多次。 当接收者收到全部邮件后会接收到特别的序列,如果接收者成功处理了邮件, 则返回 OK 应答。 SMTP 提供传送邮件的机制,如果接收方与发送方连接在同一个传送服务 下时,邮件可以直接由发送方主机传送到接收方主机;或者,当两者不在同一 个传送服

15、务下时,通过中继 SMTP 服务器传送。为了能够对 SMTP 服务器提供 中继能力,它必须拥有最终目的主机地址和邮箱名称。 (2) SMTP 工作原理 SMTP 被用来在因特网上传递电子邮件。RFC821 文件规定了该协议的所 河南理工大学毕业设计(论文)说明书 4 有细节。SMTP 工作在两种情况下:一是电子邮件从客户机传输到服务器;二 是从某一个服务器传输到另一个服务器。 协议的原理很简单。无非是一个客户端计算机向服务器发送命令,然后服 务器向客户端计算机返回一些信息。客户端发送的命令以及服务器的回应都是 字符串,用户需要特别的软件就能读出它们。 SMTP 是个请求/响应协议,命令和响应都

16、是基于 ASCII 文本,并以 符结束。响应包括一个表示返回状态的的三位数字代码。 SMTP 在 TCP 协议 25 号端口监听连接请求。 连接和发送过程,这个过程我们在这里用图解的形式来表达,见图 2- 1。 步骤 1:建立 TCP 连接 步骤 2:客户端发送 HELO 命令以标识发件人自己 的身份,然后客户端发送 MAIL 命令,服务器端正 希望以 OK 作为响应,表明准备接收 步骤 3:客户端发送 RCPT 命令,以标识该电子邮 件的计划收件人,可以有多个 RCPT 行,服务器端 则表示是否愿意为收件人接收邮件 步骤 4:协商结束,发送邮件,用命令 DATA 发送 步骤 5:以.表示结束

17、输入内容一起发送出去 步骤 6:结束此次发送,用 QUIT 命令退出 图 2-1 SMTP 连接发送流程 邮件路由过程:SMTP 服务器基于域名服务 DNS 中的计划收件人的域 名来路由电子邮件。SMTP 服务器基于 DNS 中的 MX 记录来路由电子邮件, MX 记录注册了域名和相关的 SMTP 中继主机,属于该域的电子邮件都应向该 主机发送。 河南理工大学毕业设计(论文)说明书 5 举例说,SMTP 服务器 收到一封信要发到 : 步骤 1:sendmail 请求 DNS 给出主机 的 CNAME 记录,如有, 假若 CNAME 到 ,则再次请求 的 CNAME 记录, 直到没有为止。

18、 步骤 2:假定被 CNAME 到 ,sendmail 请 域的 DNS 给出 的 MX 记录。 步骤 3:sendmail 最后请求 DNS 给出 的 A 记录,即 IP 地 址,若返回值为 1.2.3.4。 步骤 4:sendmail 与 1.2.3.4 连接,传送这封给 的信到 1.2.3.4 这台服务器的 SMTP 后台程序。 SMTP 的基本命令集,如表 2-1 所示: 表 2-1 SMTP 的基本命令集 命令命令 描述描述 HELO向服务器标识用户身份,发送者能欺骗、说谎,但一般情况下服 务器都能检测到 MAIL 初始化邮件传输mail from:RCPT标识单个的邮件接收

19、人;常在 MAIL命令后面可有多个rcpt to:DATA在单个或多个RCPT命令后, 表示所有的邮件接收人已标识,并初始化数据传输,以“.”结束 VRFY用于验证指定的用户邮箱是否存在;由于安全方面的原因,服务 器常禁止此命令 EXPN验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用HELP 查询服务器支持什么命令 NOOP无操作,服务器应响应OK QUIT结束会话 RSET重置会话,当前传输被取消 2.1.2 SMTP 设计方案 对于 SMTP 的设计,要完成的功能就是客户端和服务器的连接及连接上以 后信件的传输,在这个里面实现的问题不是很大,因为基于 SMTP 协议之下,再 利用 V

20、isual C+.NET 中提供的类就可以完成这个目的,可以用一个方框流程 河南理工大学毕业设计(论文)说明书 6 描述。 如图 2-2 所示。 发送客户端设计 职能分析 基于 SMTP 协议 建立工程模块 信件传输 实现 Visual C+.NET 工程实现 SMTP 认证算法 实现 连接实现 图 2-2 发送客户端设计模型 其中在 Visual C+.NET 中为发送客户端的设计(SMTP)提供了如下为设 计所用的类: (1) CSMTPAddress:邮件服务器地址处理类-接收各种形式的邮件服务 器地址,转换成规范格式。 (2) CSMTPSocket:Socket 封装类-对套接字进行

21、封装,提供常见 API。 (3) CSMTPConnection:邮件连接建立类-建立与邮件服务器的连接, 并设置连接过程中的一些参数。 (4) CBase64Coder:邮件编码类-采用基 64 编码,文本中的 3 个连续字 节(24bit)被编码成 4 个 6 位值,当要编码的个数不是 3 的倍数时,等号符 “=”被用作填充符。 (5) CSMTPBodyPart:邮件正文处理类-设置要发送的邮件文件名称、 标题、使用的字符集等。 (6) CSMTPMessage:服务器返回消息处理类-处理接收到的邮件服务 器端的返回信息。 河南理工大学毕业设计(论文)说明书 7 (7) CmailSen

22、dDlg:发送邮件对话框类-实现上述各类功能的集成,提 供操作界面。 2.22.2 POP3POP3 2.2.1 POP3 协议简介及工作原理 (1)POP3 协议简介 邮局协议(POP, Post Office Protocol)通常是用来接收 E-mail 信息的,目 前已发展到第三版,称为 POP3。POP3 是一个客户/服务器(C/S)协议,其中电 子邮件由服务器接收并保存,在一定时间之后,用户(或者是用户的客户电子 邮件接收程序)检查邮箱并下传邮件。 (2)POP3 工作原理 POP3 适用于 C/S 结构的脱机模型的电子邮件协议,脱机模型即不能在线 操作,当客户机与服务器连接并查询

23、新电子邮件时,被该客户机指定的所有将 被下载的邮件都将被程序下载到客户机,下载后,电子邮件客户机就可以删除 或修改任意邮件,而无需与电子邮件服务器进一步交互。 POP3 客户向 POP3 服务器发送命令并等待响应,POP3 命令采用命令行形式,用 ASCII 码表示。 服务器响应是由一个单独的命令行组成,或多个命令行组成,响应第一行以 ASCII 文本+OK 或-ERR 指出相应的操作状态是成功还是失败。 在 POP3 协议中有三种状态,认可状态,处理状态和更新状态。当客户机 与服务器建立联系时,一旦客户机提供了自己身份并成功确认,即由认可状态 转入处理状态,在完成相应的操作后客户机发出 qu

24、it 命令,则进入更新状态, 更新之后最后重返认可状态。如图 2-3 所示。 认可处理更新 等待连接身份确认quit 命令 重返认可状态 河南理工大学毕业设计(论文)说明书 8 图 2-3 POP3 协议中三种状态 一般情况下,大多数现有的 POP3 客户与服务器执行采用 ASCII 明文发送 用户名和口令,在认可状态等待客户连接的情况下,客户发出连接,并由命令 user/pass 对在网络上发送明文用户名和口令给服务器进行身份确认。一旦确认 成功,便转入处理状态。为了避免发送明文口令的问题,有一种新的认证方法, 命令为 APOP,使用 APOP,口令在传输之前被加密。 当第一次与服务器连接时

25、,POP3 服务器向客户机发送一个 ASCII 码问候, 这个问候由一串字符组成对每个客户机是唯一的,与当时的时间有关,然后, 客户机把它的纯文本口令附加到从服务器接收到的字符串之后,然后计算出结 果字符串的 MD5 单出函数消息摘要,客户机把用户名与 MD5 消息摘要作为 APOP 命令的参数一起发送出去。目前,大多数 windows 上的邮件客户软件不 支持 APOP 命令。 POP3 命令码如表 2-2 所示。 表 2-2 POP3 命令码 命令命令参数参数状态状态描述描述 USERusername认可此命令与下面的 pass 命令若成功,将导致状态转换 PASSpassword认可 A

26、POPName digest 认可Digest 是 MD5 消息摘要 STATNone处理请求服务器发回关于邮箱的统计资料,如邮件总数总字节数 UIDLMsg处理返回邮件的唯一标识符,POP3 会话的每个标识符都将是唯 一的(可选) LISTMsg处理返回邮件数量和每个邮件的大小 RETRMsg处理返回由参数标识的邮件的全部文本 DELEMsg处理服务器将参数标识的邮件标记为删除,由 quit 命令执行 RSETNone处理服务器将重置所有标记为删除的邮件,用于撤消 DELE 命 令 TOPMsg n处理服务器将返回由参数标识的邮件前 n 行内容,n 必须是正整 河南理工大学毕业设计(论文)说

27、明书 9 数(必须提供) NOOPNone处理服务器返回一个肯定的响应 QUITNone更新 a.客户机希望结束这次会话 b.如果服务器处于处理状态,那么将进入更新状态 以删除任何标记为删除的邮件 c.导致由处理状态到更新状态,又重返认可状态的转变 d.如果这个命令发出时服务器处于认可状态,则结束会 话,不进行更新状态。 2.2.2 POP3 设计方案 同样地,对于接收邮件客户端的设计,和发送类似,因为基于 POP3 协议, 所以利用 Visual C+.NET 中提供的类就可以完成这个目的,可以用一个方框 流程描述,如图 2-4 所示。 接收客户端设计 基于 POP3 协议 建立工程模块 职

28、能分析 信件传输 实现 Visual C+ .NET 工程实现 连接实现 图 2-4 接收客户端项目实现模型 其中在 Visual C+.NET 中为接收客户端的设计(POP3)提供了如下为设 计所用的类: (1)CBase4Pop3:继承 CasyncSocket 类,重载连接、接收、发送等函数。 (2)CPop3:继承 CBase4Pop3 类,封装 POP3 协议主要实现功能,诸如设 河南理工大学毕业设计(论文)说明书 10 置用户名、密码,获取邮件大小、数量、内容、对接收到的邮件进行处理等。 (3)CmailAcceptDlg:发送接收对话框类-实现上述各类功能的集成, 提供操作界面。

29、 (4)CchooseDlg:对接收到的邮件进行选择(选择查看哪封邮件)对话框 类。 (5)CmailViewDlg:邮件详细信息查看对话框类。 通过这些类的设计和调用,建立的 POP3 客户端就能够完成模型中所提出 的那些问题,能够和服务器建立好连接并且下载邮件。 2.32.3 电子邮件电子邮件 2.3.1 电子邮件与普通信件传送过程的区别 普通的邮件传输过程如图 2-4 所示,信件的中转是通过邮局进行的。 图 2-4 普通邮件的传送过程 而电子邮件的传送是通过 E-mail 服务器进行的,二者在思想上有很多的 相通处,不同的只是实现的手段不同而已。如图 2-5 所示: 河南理工大学毕业设计

30、(论文)说明书 11 图 2-5 电子邮件的传送过程 2.3.2 电子邮件格式 在开发 E-mail 客户端管理软件之前,首先需要了解电子邮件的格式标准, 没有统一的标准,两个不同的实体是无法进行通信的,更不可能谈存在什么交 互操作了。根据 RFC2822(http:/www.faqs.org/rfcs/rfc2822.html)的规定,电子邮 件有很多行组成,每行由(ASCII 代码 13 和 ASCII 代码 10)结束。每 行的最大长度为 998 个字符。其中有些行提供了收发电子邮件所必需的信息, 这些行被称为头(Header) ,所有的头构成了头域(Header Field) 。其他的

31、行用 于保存邮件的具体内容。 头域提供了很多信息,其中包括邮件的来源、邮件的目的地和邮件的主题 等。每个头由名称和冒号加上相应的值构成。例如“From:” 、 “Sender:”和 “Reply-To:”中记录了邮件的来源。在“From:”中记录的是邮件的作者; 在“Sender:”中指定了发送邮件的代理(可以是邮件地址,也可以是机器名 称) ;在“Reply-To:”中指定了接受回信的邮箱地址。 一封邮件可能有多个作者,因此“From:”中可以指定一个或多个邮箱地 址。下面给出了一个 From 的例子。 From:thong, 在一封电子邮件中只能有一个“Sender:”。因此“Sender

32、:”的值只能包含 一个邮箱地址。如果在“From:”中只有一个作者,而且“Sender:”的值和 “From:”的值相同,则“Sender:”就不会出现在电子邮件中,否则会出现信息 冗余;反之“Sender:”则应该出现在邮件中,下面是一个“Sender:”的例子。 河南理工大学毕业设计(论文)说明书 12 Sender:thong 在电子邮件中可以指定将回信发送到多个邮箱地址中。因此“Reply-To:” 中可以包含一个或者多个邮箱地址,每个地址之间用逗号隔开。如果邮件中有 “Reply-To:”,回信会被发送到罗列在“Reply-To:”中的所有地址;如果邮件 中没有“Reply-To:

33、”,则回信会被发送到罗列在“From:”中的地址。那么谁会 收到邮件呢?“To:”和“Cc:”中保存了接受邮件的邮箱地址。两者的值都可以 包含多个邮箱地址。 除了邮件的来源和接受者,RFC2822 中还定义了其他一些头,例如 Subject:中包含了地址邮件的主题。下面是一个电子邮件头域的例子。 From:thong To:thong Cc:zhan Subject:Test Email 表 2-3 介绍了 RFC2822 中定义的常用的标准信头字段。 表 2-3 RFC2822 中常用标准信头字段 与发信方有关的信头字段 格式:From:mailbox 举例: From: 写信人字段。说明信

34、件的原始创建者,给出他的电子信 箱地址。创建者对信件的原始内容负责。 格式:Sender:mailbox 举例: From: Sender: 发送者字段。说明实际提交发送这个信件的人,给出他 的电子信箱地址。当发信人与写信人不一样时使用。比 如,秘书替经理发信。发送者对发送负责。 格式:Reply-TO:mailbox 举例: From: From: 回复字段。指定应当把回信发到哪里。如果有此字段, 回信将会发给它指定的邮箱,而不会发给 From 字段指定 的邮箱。比如,发送的是经理的信,但回信应交办公室处 理。 与收信方有关的信头字段 格式:TO:mailbox list 举例:TO: 收信

35、人字段。指定主要收信人的邮箱地址,可以是多个 邮箱地址的列表,地址中间用逗号隔开。 格式:Cc:mailbox list 举例:Cc: 抄送字段。指定此信件要同时发给哪些人,也称为抄送。 也可以使用邮箱地址列表,抄送给多个人。 格式:Bcc:mailbox list密抄字段。指定此信件要同时秘密发给哪些人,也称为 密件抄送。也可以使用邮箱地址列表,密抄给多个人。 其它的信头字段 河南理工大学毕业设计(论文)说明书 13 格式:Date:date-time 举例:Date:Tue,04 Dec 2011 16:18:08 +800 日期字段:Date 字段含有电子邮件创建的日期和时间。 格式:S

36、ubject:*text 举例:Subject:Hello! Subject:Re:Hello! 信件主题字段。描述信件的主题。当回复信件时,通常 在主题前面增加“Re:”前缀,标记为该信件为回复信件: 当信件被转发时,通常在主题文字前面加上“Fw:”, “Fwd:”这样的前缀。 格式:Received: “from“ domain;发送主机 “by“ domain;接收主机 “via“ atom;物理路径 “id“ msg-id;接收者 msg id 接受字段。是投递信件的特定邮件服务器所作的记录。 处理邮件投递的每个服务器必须给它处理的每个信头的 前面加一个 Received 字段,用以描

37、述信件到达目的地所 经过的路径以及相关信息。当跟踪各个电子邮件问题时, 这个信息很有帮助。 格式:Resent-* 举例:Resent-From Resent-Sender Resent-date Resent-Reply-To 重发字段。当需要把收到的信件重发给另一组收信人的 时候,可以保持整个原始信件不变,并简单地产生重发 信件所要求的新信头字段。为避免与以前的字段相混。 新添加的信头字段都加上 Resent-前缀字符串,它们的语 法与未加前缀的同名字段相同。 格式:Message-ID:msg-id 信件标识字段。用于表示一个信件唯一标识,该字段通 常由 SMTP 服务器生成,这个值通常

38、是唯一的。形式根 据使用的软件而定。通常左边是标识符,右边指定电脑 名 2.42.4 MD5MD5 散列算法散列算法 MD5 全称是 Message Digest Algorithm 5(消息摘要算法第五版)为计算机 安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。它是在 90 年代初由 MIT Laboratory for Computer Science 和 RSA Data Security Ic,的 Ronald L. Rivest 开发出来,经 MD2、MD3 和 MD4 发展而来。它的作用是让 大容量信息在用数字签名软件签署私人密钥前被“压缩“成一种保密的格式(就 是把一

39、个任意长度的字节串变换成一定长的大整数) 。不管是 MD2、MD4 还是 MD5,它们都需要获得一个随机长度的信息并产生一个 128 位的信息摘要。虽 然这些算法的结构或多或少有些相似,但 MD2 的设计与 MD4 和 MD5 完全不 同,那是因为 MD2 是为 8 位机器做设计优化的,而 MD4 和 MD5 却是面向 32 位的电脑。这三个算法的描述和 c 语言源代码在 Internet RFC 1321 中有详细的 描述,这是一份最权威的文档,由 Ronald L. Rivest 在 1992 年 8 月向 IETF 提 交。 河南理工大学毕业设计(论文)说明书 14 对 MD5 算法简要

40、的叙述可以为:MD5 以 512 位分组来处理输入的信息, 且每一分组又被划分为 16 个 32 位子分组,经过了一系列的处理后,算法的输 出由四个 32 位分组组成,将这四个 32 位分组级联后将生成一个 128 位散列值。 在 MD5 算法中,首先需要对信息进行填充,使其位长对 512 求余的结果 等于 448。因此,信息的位长(Bits Length)将被扩展至 N*512+448,即 N*64+56 个字节(Bytes) ,N 为一个非负整数,N 可以是零。填充的方法如下, 在信息的后面填充一个 1 和无数个 0,直到满足上面的条件时才停止用 0 对信 息的填充。然后,在这个结果后面附

41、加一个以 64 位二进制表示的填充前信息 长度。经过这两步的处理,现在的信息的位长=N*512+448+64=(N+1)*512,即 长度恰好是 512 的整数倍。这样做的原因是为满足后面处理中对信息长度的要 求。 MD5 中有四个 32 位被称作链接变量(Chaining Variable)的整数参数,他 们分别为:A=0x67452301,B=0xefcdab89,C=0x98badcfe,D=0x10325476。 当设置好这四个链接变量后,就开始进入算法的四轮循环运算。循环的次 数是信息中 512 位信息分组的数目。 将上面四个链接变量复制到另外四个变量中:A 到 a,B 到 b,C

42、到 c,D 到 d。 主循环有四轮,每轮循环都很相似。第一轮进行 16 次操作。每次操作对 a、b、c 和 d 中的其中三个作一次非线性函数运算,然后将所得结果加上第四 个变量,文本的一个子分组和一个常数。再将所得结果向左环移一个不定的数, 并加上 a、b、c 或 d 中之一。最后用该结果取代 a、b、c 或 d 中之一。 以一下是每次操作中用到的四个非线性函数(每轮一个) 。 F(X,Y,Z) =(X /* Load magic initialization constants.*/ context-state0 = 0x67452301; context-state1 = 0xefcdab

43、89; context-state2 = 0x98badcfe; context-state3 = 0x10325476; MD5 作为主体程序程序运行时候的动态链接库存在,实现这些功能的代 码如下: extern “C“ int APIENTRY DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) / 如果使用 lpReserved,请将此移除 UNREFERENCED_PARAMETER(lpReserved); if (dwReason = DLL_PROCESS_ATTACH) TRACE0(“MD5.DLL

44、正在初始化!n“); / 扩展 DLL 一次性初始化 if (!AfxInitExtensionModule(MD5DLL, hInstance) return 0; / 将此 DLL 插入到资源链中 / 注意:如果此扩展 DLL 由 / MFC 规则 DLL(如 ActiveX 控件)隐式链接到 / 而不是由 MFC 应用程序链接到,则需要将此行从 DllMain 中移除 / 并将其放置在一个从此扩展 DLL 导出的单独的函数中。使用此扩 展 河南理工大学毕业设计(论文)说明书 18 / DLL 的规则 DLL 然后应显式调用该函数以初始化此扩展 DLL。 / 否则,CDynLinkLibr

45、ary 对象不会附加到规则 DLL 的资源链, / 并将导致严重的问题。 new CDynLinkLibrary(MD5DLL); else if (dwReason = DLL_PROCESS_DETACH) TRACE0(“MD5.DLL 正在终止!n“); / 在调用析构函数之前终止该库 AfxTermExtensionModule(MD5DLL); return 1; / 确定 下面给出的 MD5 这个算法的变换核,可以和其原理给出的算子进行比较, 这里进行了 64 组运算,分成 4 轮进行。变化的算子是: F(X,Y,Z)=(X Decode (x, block, 64); /* R

46、ound 1 */ FF (a, b, c, d, x 0, S11, 0xd76aa478); /* 1 */ FF (d, a, b, c, x 1, S12, 0xe8c7b756); /* 2 */ FF (c, d, a, b, x 2, S13, 0x242070db); /* 3 */ FF (b, c, d, a, x 3, S14, 0xc1bdceee); /* 4 */ FF (a, b, c, d, x 4, S11, 0xf57c0faf); /* 5 */ FF (d, a, b, c, x 5, S12, 0x4787c62a); /* 6 */ FF (c, d, a, b, x 6, S13, 0xa8304613); /* 7 */ FF (b, c, d, a, x 7, S14, 0xfd469501); /* 8 */ FF (a, b, c, d, x 8, S11, 0x698098d8); /* 9 */ FF (d, a, b, c, x 9, S12, 0x8b44f7af); /* 10 */ FF (c

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 信息产业


经营许可证编号:宁ICP备18001539号-1