freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)設(shè)計(jì)---e-mail客戶端管理程序的設(shè)計(jì)與實(shí)現(xiàn)-畢業(yè)設(shè)計(jì)(編輯修改稿)

2025-02-24 04:56 本頁面
 

【文章內(nèi)容簡(jiǎn)介】 圖 24 普通郵件的傳送過程 而電子郵件的傳送是通過 Email 服務(wù) 器進(jìn)行的,二者在思想上有很多的相通處,不同的只是實(shí)現(xiàn)的手段不同而已。如圖 25 所示: 圖 25 電子郵件的傳送過程 電子郵件格式 在開發(fā) Email 客戶端管理軟件 之前,首先需要了解電子郵件的格式標(biāo)準(zhǔn), 11 沒有統(tǒng)一的標(biāo)準(zhǔn),兩個(gè)不同的實(shí)體是無法進(jìn)行通信的,更不可能談存在什么交互操作了。根據(jù) RFC2822(件有很多行組成,每行由 CRLF( ASCII 代碼 13 和 ASCII 代碼 10)結(jié)束。每行的最大長(zhǎng)度為 998 個(gè)字符。其中有些行提供了收發(fā)電子郵件所必需的信息,這些行被稱為頭 ( Header) ,所有的頭構(gòu)成了頭域 ( Header Field) 。其他的行用于保存郵件的具體內(nèi)容。 頭域提供了很多信息,其中包括郵件的來源、 郵件的目的地和郵件的主題等。每個(gè)頭由名稱和冒號(hào)加上相應(yīng)的值構(gòu)成。例如 “ From:”、“ Sender:” 和“ ReplyTo:” 中記錄了郵件的來源。在 “ From:” 中記錄的是郵件的作者;在“ Sender:” 中指定了發(fā)送郵件的代理(可以是郵件地址,也可以是機(jī)器名稱);在 “ ReplyTo:” 中指定了接受回信的郵箱地址。 一封郵件可能有多個(gè)作者,因此 “ From:” 中可以指定一個(gè)或多個(gè)郵箱地址。下面給出了一個(gè) From的例子。 From: thong, 在一封電子郵件中只能有一個(gè) “Sender: ”。因此 “Sender: ”的值只能包含一個(gè)郵箱地址。如果在 “From: ”中只有一個(gè)作者,而且 “Sender: ”的值和 “From: ”的值相同,則 “Sender: ”就不會(huì)出現(xiàn)在電子郵件中,否則會(huì)出現(xiàn)信息冗余;反之“Sender: ”則應(yīng)該出現(xiàn)在郵件中,下面是一個(gè) “Sender: ”的例子。 Sender: thong 在電子郵件中可以指定將回信發(fā)送到多個(gè)郵箱地址中。因此 “ReplyTo: ”中可以包含一個(gè)或者多個(gè)郵箱地址,每個(gè)地址之間用逗號(hào)隔開。如果郵件中有“ReplyTo: ”,回信會(huì)被發(fā)送到羅列在 “ReplyTo: ”中的所有地址;如果郵件中沒有 “ReplyTo: ”,則回信會(huì)被發(fā)送到 羅列在 “From: ”中的地址。那么誰會(huì)收到郵件呢? “To: ”和 “Cc: ”中保存了接受郵件的郵箱地址。兩者的值都可以包含多個(gè)郵箱地址。 除了郵件的來源和接受者, RFC2822 中還定義了其他一些頭,例如 Subject:中包含了地址郵件的主題。下面是一個(gè)電子郵件頭域的例子。 From: thong 12 To: thong Cc: zhan Subject: Test Email 表 23 介紹 了 RFC2822 中定義的常用的標(biāo) 準(zhǔn)信頭字段。 表 23 RFC2822 中常用標(biāo)準(zhǔn)信頭字段 與發(fā)信方有關(guān)的信頭字段 格式: From: mailbox 舉例: From: 寫信人字段。說明信件的原始創(chuàng)建者,給出他的電子信箱地址。創(chuàng)建者對(duì)信件的原始內(nèi)容負(fù)責(zé)。 格式: Sender: mailbox 舉例: From: Sender: 發(fā)送者字段。說明實(shí)際提交發(fā)送這個(gè)信件的人,給出他的電子信箱地址。當(dāng)發(fā)信人與寫信人不一樣時(shí)使用。比如,秘書替經(jīng)理發(fā)信。發(fā)送者對(duì)發(fā)送負(fù)責(zé)。 格式 : ReplyTO: mailbox 舉例: From: From: 回復(fù)字段。指定應(yīng)當(dāng)把回信發(fā)到哪里。如果有此字段,回信將會(huì)發(fā)給它指定的郵箱,而不會(huì)發(fā)給 From 字段指定的郵箱。比如,發(fā)送的是經(jīng)理的信 ,但回信應(yīng)交辦公室處理。 與收信方有關(guān)的信頭字段 格式: TO: mailbox list 舉例: TO: 收信人字段。指定主要收信人的郵箱地址,可以是多個(gè)郵箱地址的列表,地址中間用逗號(hào)隔開。 格式: Cc: mailbox list 舉例: Cc: 抄送字段。指定此信件要同時(shí)發(fā)給哪些人,也稱為抄送。也可以使用郵箱地址列表,抄送給多個(gè)人。 格式: Bcc: mailbox list 密抄字段。指定此信件要同時(shí)秘密發(fā)給哪些人,也稱為密件抄送。也可以使用郵箱地址列表,密抄給多個(gè)人。 其它的信頭字段 格式: Date: datetime 舉例: Date: Tue,04 Dec 2021 16:18:08 +800 日期字段: Date 字段含有電子郵件創(chuàng)建的日期和時(shí)間。 格式: Subject: *text 舉例: Subject: Hello! Subject: Re:Hello! 信件主題字段。描述信件的主題。當(dāng)回復(fù)信件時(shí),通常在主題前面增加 “Re: ”前綴,標(biāo)記為該信件為回復(fù)信件:當(dāng)信件被轉(zhuǎn)發(fā)時(shí),通常在主題文字前面加上 “Fw: ”, “Fwd: ”這樣的前綴。 格式 : Received: [from domain]。發(fā)送主機(jī) [by domain]。接收主機(jī) [via atom]。物理路徑 [id msgid]。接收者 msg id 接受字段。是投遞信件的特定郵件服務(wù)器所作的記錄。處理郵件投遞 的每個(gè)服務(wù)器必須給它處理的每個(gè)信頭的前面加一個(gè) Received 字段,用以描述信件到達(dá)目的地所經(jīng)過的路徑以及相關(guān)信息。當(dāng)跟蹤各個(gè)電子郵件問題時(shí),這個(gè)信息很有幫助。 格式: Resent* 舉例: ResentFrom ResentSender Resentdate ResentReplyTo 重發(fā)字段。當(dāng)需要把收到的信件重發(fā)給另一組收信人的時(shí)候,可以保持整個(gè)原始信件不變,并簡(jiǎn)單地產(chǎn)生重發(fā)信件所要求的新信頭字段。為避免與以前的字段相混。新添加的信頭字段都加上 Resent前綴字符串,它們的語法與未加前 綴的同名字段相同。 格式: MessageID: msgid 信件標(biāo)識(shí)字段。用于表示一個(gè)信件唯一標(biāo)識(shí),該字段通常由 SMTP 服務(wù)器生成,這個(gè)值通常是唯一的。形式根據(jù)使用的軟件而定。通常左邊是標(biāo)識(shí)符,右邊指定電腦名 13 MD5 散列算法 MD5 全稱是 Message Digest Algorithm 5(消息摘要算法第五版)為計(jì)算機(jī)安全領(lǐng)域廣泛使用的一種散列函數(shù),用以提供消息的完整性保護(hù)。它是在 90 年代初由 MIT Laboratory for Computer Science 和 RSA Data Security Ic,的 Ronald L. Rivest 開發(fā)出來,經(jīng) MD MD3 和 MD4 發(fā)展而來。它的作用是讓大容量信息在用數(shù)字簽名軟件簽署私人密鑰前被 壓縮 成一種保密的格式(就是把一個(gè)任意長(zhǎng)度的字節(jié)串變換成一定長(zhǎng)的大整數(shù))。不管是 MD MD4 還是 MD5,它們都需要獲得一個(gè)隨機(jī)長(zhǎng)度的信息并產(chǎn)生一個(gè) 128 位的信息摘要。雖然這些算法的結(jié)構(gòu)或多或少有些相似,但 MD2 的設(shè)計(jì)與 MD4 和 MD5 完全不同,那是因?yàn)?MD2 是為 8 位機(jī)器做設(shè)計(jì)優(yōu)化的,而 MD4 和 MD5 卻是面向 32 位的電腦。這三個(gè)算法的描述和 c 語言源代碼在 Inter RFC 1321 中有詳細(xì)的描述,這是一份最權(quán)威的文檔,由 Ronald L. Rivest 在 1992 年 8 月向 IETF 提交。 對(duì) MD5 算法簡(jiǎn)要的敘述可以為: MD5 以 512 位分組來處理輸入的信息,且每一分組又被劃分為 16 個(gè) 32 位子分組,經(jīng)過了一系列的處理后,算法的輸出由四個(gè) 32 位分組組成,將這四個(gè) 32 位分組級(jí)聯(lián)后將生成一個(gè) 128 位散列值。 在 MD5 算法中,首先需要對(duì)信息進(jìn)行填充,使其位長(zhǎng)對(duì) 512 求余的結(jié)果等于 448。因此,信息的位長(zhǎng)( Bits Length)將被擴(kuò)展至 N*512+448,即 N*64+56個(gè)字節(jié)( Bytes), N 為一個(gè)非負(fù)整數(shù), N 可以是零。填充的方法如下,在信息的后面填充一個(gè) 1 和無數(shù)個(gè) 0,直到滿足上面的條件時(shí)才停止用 0 對(duì)信息的填充。然后,在這個(gè)結(jié)果后面附加一個(gè)以 64 位二進(jìn)制表示的填充前信息長(zhǎng)度。經(jīng)過這兩步的處理,現(xiàn)在的信息的位長(zhǎng) =N*512+448+64=(N+1)*512,即長(zhǎng)度恰好是 512的整數(shù)倍。這樣做的原因是為滿足后面處理中對(duì)信息長(zhǎng)度的要求。 MD5 中有四個(gè) 32 位被稱作鏈接變量( Chaining Variable)的整數(shù)參數(shù),他們分別為: A=0x67452301, B=0xefcdab89, C=0x98badcfe, D=0x10325476。 當(dāng)設(shè)置好這四個(gè)鏈接變量后,就開始進(jìn)入算法的四輪循環(huán)運(yùn)算。循環(huán)的次數(shù)是信息中 512 位信息分組的數(shù)目。 將上面四個(gè)鏈接變量復(fù)制到另外四個(gè)變量中: A 到 a, B 到 b, C 到 c, D 14 到 d。 主循環(huán)有四輪 ,每輪循環(huán)都很相似。第一輪進(jìn)行 16 次操作。每次操作對(duì) a、b、 c 和 d 中的其中三個(gè)作一次非線性函數(shù)運(yùn)算,然后將所得結(jié)果加上第四個(gè)變量,文本的一個(gè)子分組和一個(gè)常數(shù)。再將所得結(jié)果向左環(huán)移一個(gè)不定的數(shù),并加上 a、 b、 c 或 d 中之一。最后用該結(jié)果取代 a、 b、 c 或 d 中之一。 以一下 是每次操作中用到的四個(gè)非線性函數(shù)(每輪一個(gè))。 F(X,Y,Z) =(Xamp。Y)|((~X)amp。Z) G(X,Y,Z) =(Xamp。Z)|(Yamp。(~Z)) H(X,Y,Z) =X^Y^Z I(X,Y,Z)=Y^(X|(~Z)) 這四個(gè)函數(shù)的說明:如果 X、 Y 和 Z 的對(duì)應(yīng)位是獨(dú)立和均勻的,那么結(jié)果的每一位也應(yīng)是獨(dú)立和均勻的。 F 是一個(gè)逐位運(yùn)算的函數(shù)。即,如果 X,那么 Y,否則 Z。函數(shù) H 是逐位奇偶操作符。 15 第三章 系統(tǒng)設(shè)計(jì) 系統(tǒng)架構(gòu) 設(shè)計(jì) 軟 件的總體架構(gòu)如圖 31 所示 : 圖 31 軟件架構(gòu)圖 框架資源設(shè)計(jì) 這是一個(gè)基于對(duì)話框的應(yīng)用程序,在這個(gè)程序的設(shè)計(jì)中要注意 的是 SMTP的認(rèn)證 MD5 框架設(shè)定和客戶端設(shè)定分開了, MD5 是作為整個(gè)程序的動(dòng)態(tài)鏈接庫(kù)存在,所以在編譯的時(shí)候,先編譯 MD5 的項(xiàng)目,將動(dòng)態(tài)鏈接庫(kù)( DLL)加載。 系統(tǒng)代碼設(shè)計(jì) 主要通過 3 個(gè)方面的代碼設(shè)計(jì): ( 1) MD5 散列算法設(shè)計(jì)。 ( 2) SMTP 客戶端設(shè)計(jì)。 ( 3) POP3 客戶端設(shè)計(jì)。 MD5 散列算法設(shè)計(jì) 由于發(fā)送郵件服務(wù)一般需要認(rèn)證才能成功進(jìn)行 郵件的發(fā)送,所以設(shè)計(jì)模型 主界 面 用戶 發(fā)送郵件類 主要功能選擇 接收郵件類 16 中, SMTP 認(rèn)證采取 MD5 散列算法。 雖然 MD5 是 SMTP 設(shè)計(jì)框架提出的,但是由于在設(shè)計(jì)的過程中把它作為了整個(gè)程序的動(dòng)態(tài)鏈接庫(kù),所以我們先提出介紹這個(gè) MD5 算法,原理在前面已經(jīng)給出了詳細(xì)的解釋,也給出了 MD5 算法中的算子。 初始化 MD5 模塊,這里完成了 MD5 模塊的單元分配以及算子的設(shè)定,為下面作為主體程序的動(dòng)態(tài)鏈接庫(kù)作好鋪墊。 void MD5Init (MD5_CTX *context) { contextcount[0] = contextcount[1] = 0。 /* Load magic initialization constants.*/ contextstate[0] = 0x67452301。 contextstate[1] = 0xefcdab89。 contextstate[2] = 0x98badcfe。 contextstate[3] = 0x10325476。 } MD5 作為主體程序程序運(yùn)行時(shí)候的動(dòng)態(tài)鏈接庫(kù)存在,實(shí)現(xiàn)這些功能的代碼如下 : extern C int APIENTRY DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) { // 如果使用 lpReserved,請(qǐng)將此移除 UNREFERENCED_PARAMETER(lpReserved)。 if (dwReason == DLL_PROCESS_ATTACH) { TRACE0( 正在初始化! \n)。
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1