

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 課 程 設(shè) 計</b></p><p><b> 課程設(shè)計任務(wù)書</b></p><p> 學(xué)生姓名: 專業(yè)班級: </p><p> 指導(dǎo)教師: 工作單位: 自動化學(xué)院 </p><p> 題
2、 目: 加密解密程序設(shè)計</p><p><b> 初始條件:</b></p><p> 掌握8086匯編語言程序設(shè)計方法,設(shè)計不同的加密算法并完成對數(shù)據(jù)的加密和解密工作。</p><p> 要求完成的主要任務(wù): (包括課程設(shè)計工作量及其技術(shù)要求,以及說明書撰寫等具體要求)</p><p> 1 . 程序運(yùn)行
3、后,首先顯示‘Please Input Data:’,并響鈴一聲,然后從鍵盤接受以字母開始的101個字節(jié)型數(shù)據(jù),若首字母為‘E’,則將后續(xù)的100個數(shù)據(jù)進(jìn)行加密后,顯示在屏幕上;若首字母為‘R’,則將后續(xù)的100個數(shù)據(jù)解密,并顯示在屏幕上。</p><p> 2 . 撰寫課程設(shè)計說明書。內(nèi)容包括:摘要、目錄、正文、參考文獻(xiàn)、附錄(程序清單)。正文部分包括:設(shè)計任務(wù)及要求、方案比較及論證、軟件設(shè)計說明(軟件思想,
4、流程,源程序設(shè)計及說明等)、程序調(diào)試說明和結(jié)果分析、課程設(shè)計收獲及心得體會。</p><p><b> 時間安排:</b></p><p> 2012年12月30 日-----12月31 日 查閱資料及方案設(shè)計</p><p> 2013年01月01 日-----01月05 日 編程</p><p>
5、; 2013年01月 06日-----06月08 日 調(diào)試程序</p><p> 2013年01月09 日-----01月10 日 撰寫課程設(shè)計報告</p><p> 指導(dǎo)教師簽名: 2013 年 01 月 11 日</p><p> 系主任(或責(zé)任教師)簽名: 年 月 日&l
6、t;/p><p><b> 目錄</b></p><p><b> 摘要1</b></p><p> 1設(shè)計任務(wù)及要求2</p><p> 1.1程序設(shè)計任務(wù)2</p><p> 1.2程序設(shè)計要求及目的2</p><p><b&g
7、t; 1.3需求分析2</b></p><p> 2匯編語言之加密解密技術(shù)3</p><p> 2.1匯編語言簡介3</p><p> 2.2加密解密技術(shù)簡介3</p><p> 2.3加密的目的4</p><p><b> 3方案設(shè)計5</b></p&g
8、t;<p><b> 3.1加密方式5</b></p><p><b> 3.2方案比較5</b></p><p><b> 3.3設(shè)計思路5</b></p><p> 4設(shè)計功能模塊概述6</p><p> 4.1程序所需模塊6</p&
9、gt;<p> 4.2程序運(yùn)行界面6</p><p><b> 4.3響鈴程序7</b></p><p> 4.4功能選擇程序7</p><p> 4.5數(shù)據(jù)循環(huán)輸入子程序8</p><p> 4.6加密過程程序9</p><p> 4.7解密過程程序10&l
10、t;/p><p> 4.8退出程序11</p><p> 5總體程序及運(yùn)行結(jié)果13</p><p> 5.1總體程序流程圖13</p><p> 5.2程序調(diào)試13</p><p> 5.3程序運(yùn)行結(jié)果14</p><p> 6課程設(shè)計收獲及心得體會17</p>
11、<p><b> 參考文獻(xiàn)18</b></p><p><b> 附錄19</b></p><p><b> 摘要</b></p><p> 計算機(jī)是通過執(zhí)行指令序列來工作的,每種計算機(jī)都有一組指令集提供給用戶使用,這組指令集稱為該計算機(jī)的指令系統(tǒng)。8086CPU的指令系統(tǒng)不僅
12、包含8位機(jī)的全部指令,而且增加了一些功能較強(qiáng)的16位數(shù)據(jù)處理指令,如乘法,除法指令,因而同時具有8位和16位的處理能力。匯編語言是與機(jī)器語言密切相關(guān)的,是面向機(jī)器的語言。</p><p> 高級語言編寫的程序,會編譯成機(jī)器語言在CPU中執(zhí)行,如Visual C++等。由于機(jī)器語言與匯編語言是一一對應(yīng)的,因此就可將機(jī)器語言轉(zhuǎn)化成匯編語言,這個過程稱之為反匯編。而匯編語言可能讀性是比較好的,這樣就可分析程序流程,解
13、析其功能了,這個過程就是解密(俗稱破解)。也就是說,解密的基礎(chǔ)是建立在匯編語言級別上的,匯編語言是大學(xué)計算機(jī)的必修課,這方面的書籍品種很多,雖然大多書本是以DOS匯編為講解平臺,但對理解匯編指令功能是沒影響的。掌握加密解密這方面技術(shù),可以提高自己的調(diào)試技能,并且能了解他人程序思路,使自己寫出更好的程序。研究解密技術(shù)有助于掌握一些系統(tǒng)底層知識,系統(tǒng)底層知識絕對是構(gòu)造起大型軟件的堅(jiān)實(shí)基礎(chǔ)。</p><p> 本次設(shè)
14、計就是要用8086匯編語言設(shè)計一個程序,使它能夠?qū)W(wǎng)絡(luò)信息的原始數(shù)據(jù)進(jìn)行加密保護(hù)和解密使用。信息的傳輸則是通過公共信道這些通道基本是是不設(shè)防的,很脆弱的,很容易受到攻擊和破壞,因而需要一種措施來保護(hù)我們的數(shù)據(jù),防止被一些用心不良的人盜取或破壞。數(shù)據(jù)加密和解密功能的實(shí)現(xiàn)是利用對數(shù)據(jù)的ASCII碼進(jìn)行加減運(yùn)算,使它改寫為另一組數(shù)據(jù),隱藏了原數(shù)據(jù),使他人不能看到,從而保證了原數(shù)據(jù)的安全。加密(incode):對明文(可讀懂的信息)進(jìn)行翻譯,使
15、用不同的算法對明文以代碼形式(密碼)實(shí)施加密。該過程的逆過程稱為 解密(descode),即將該編碼信息轉(zhuǎn)化為明文的過程。</p><p> 關(guān)鍵詞:加密解密 匯編語言 數(shù)據(jù)保護(hù)</p><p><b> 加密解密程序設(shè)計</b></p><p><b> 1設(shè)計任務(wù)及要求</b></p><p&
16、gt;<b> 1.1程序設(shè)計任務(wù)</b></p><p> 程序運(yùn)行后,首先顯示‘Please Input Data:’,并響鈴一聲,然后從鍵盤接受以字母開始的101個字節(jié)型數(shù)據(jù),如果首字母為‘E’,則將后續(xù)的100個數(shù)據(jù)進(jìn)行加密后,顯示在屏幕上;如果首字母為‘R’,則將后續(xù)的100個數(shù)據(jù)解密,并顯示在屏幕上。</p><p> 1.2程序設(shè)計要求及目的<
17、;/p><p> 撰寫課程設(shè)計說明書。內(nèi)容包括:摘要、目錄、正文、參考文獻(xiàn)、附錄(程序清單)。正文部分包括:設(shè)計任務(wù)及要求、方案比較及論證、軟件設(shè)計說明(軟件思想,流程,源程序設(shè)計及說明等)、程序調(diào)試說明和結(jié)果分析、課程設(shè)計收獲及心得體會。</p><p> 程序設(shè)計的目的是通過親自實(shí)踐,親自動手以加強(qiáng)和鞏固課本上的知識,消除課堂上遇到的疑惑;通過課程設(shè)計培養(yǎng)獨(dú)立動手和獨(dú)立思考的能力,提高
18、自主創(chuàng)新思維水平;了解和熟練匯編語言中的各種指令,學(xué)會編寫匯編程序;學(xué)會查找資料,應(yīng)用資料,并養(yǎng)成分類收藏資料的習(xí)慣。</p><p><b> 1.3需求分析</b></p><p> ?。?)要求處理命令行參數(shù)。</p><p> (2)基本的算術(shù)運(yùn)算和邏輯位運(yùn)算。 </p><p> ?。?)用匯編實(shí)現(xiàn)簡單程序
19、編寫并調(diào)用子程序。 </p><p> ?。?)DOS功能調(diào)用中有關(guān)響鈴、字符串輸出的指令。 </p><p> (5)可執(zhí)行程序的參數(shù)使用。 </p><p> ?。?)綜合解決問題的能能力。</p><p> 2匯編語言之加密解密技術(shù)</p><p><b> 2.1匯編語言簡介</b>
20、</p><p> 匯編語言是一種用于電子計算機(jī)、微處理器、微控制器或其他可編程器件的低級語言,在不同的設(shè)備中,匯編語言對應(yīng)著不同的機(jī)器語言指令集。一種匯編語言專用于某種計算機(jī)系統(tǒng)結(jié)構(gòu),而不像許多高級語言,可以在不同系統(tǒng)平臺之間移植。使用匯編語言編寫的源代碼,需要通過使用相應(yīng)的匯編程序?qū)⑺鼈冝D(zhuǎn)換成可執(zhí)行的機(jī)器代碼。這一過程被稱為匯編過程。</p><p> 匯編語言采用了助記符來代表特
21、定低級機(jī)器語言的操作。特定的匯編目標(biāo)指令集可能會包括特定的操作數(shù)。許多匯編程序可以識別代表地址和常量的標(biāo)簽(l和符號,這樣就可以用字符來代表操作數(shù)而無需采取寫死的方式。普遍地說,特定的匯編語言和特定的機(jī)器語言指令集是一一對應(yīng)的。</p><p> 匯編語言不像其他大多數(shù)的程序設(shè)計語言一樣被泛用于程序設(shè)計;在今天的實(shí)際應(yīng)用中,它通常被應(yīng)用在底層硬件操作和高要求的程序優(yōu)化的場合。驅(qū)動程序、嵌入式操作系統(tǒng)和實(shí)時運(yùn)行程
22、序都需要組合語言。</p><p> 2.2加密解密技術(shù)簡介</p><p> 加密技術(shù)是最常用的安全保密手段,利用技術(shù)手段把重要的數(shù)據(jù)變?yōu)閬y碼(加密)傳送,到達(dá)目的地后再用相同或不同的手段還原(解密)。 </p><p> 加密技術(shù)包括兩個元素:算法和密鑰。算法是將普通的信息或者可以理解的信息與一串?dāng)?shù)字(密鑰)結(jié)合,產(chǎn)生不可理解的密文的步驟,密鑰是用來對數(shù)據(jù)
23、進(jìn)行編碼和解密的一種算法。在安全保密中,可通過適當(dāng)?shù)蔫€加密技術(shù)和管理機(jī)制來保證網(wǎng)絡(luò)的信息通信安全。 </p><p> 軟件的加密與解密是一個迷人的研究領(lǐng)域,它幾乎可以與任意一種計算機(jī)技術(shù)緊密結(jié)合——密碼學(xué)、程序設(shè)計語言、操作系統(tǒng)、數(shù)據(jù)結(jié)構(gòu) </p><p> 常用數(shù)據(jù)加密算法有: 數(shù)據(jù)加密算法有很多種,按照發(fā)展進(jìn)程來分,經(jīng)歷了古典密碼、對稱密鑰密碼和公開密鑰密碼階段,古典密碼算法有替
24、代加密、置換加密;對稱加密算法包括DES和人AES;非對稱加密算法包括RSA、背包密碼、McEliece密碼、Rabin、橢圓曲線、EIigamal D-H等。 目前在數(shù)據(jù)通信中使用最普遍的算法有DESDESDESDES算法、及RSARSARSARSA算法和PGP算法等。</p><p><b> 2.3加密的目的</b></p><p> 加密用于達(dá)到以下目的:
25、</p><p> ?。?)保密性:幫助保護(hù)用戶的標(biāo)識或數(shù)據(jù)不被讀取。</p><p> (2)數(shù)據(jù)完整性:幫助保護(hù)數(shù)據(jù)不被更改。</p><p> ?。?)身份驗(yàn)證:確保數(shù)據(jù)發(fā)自特定的一方。</p><p> (4)不可否認(rèn)性:防止特定的一方否認(rèn)發(fā)送過消息。</p><p> 為了達(dá)到這些目的,可以使用算法和慣
26、例的組合來創(chuàng)建加密方案。私鑰加密即對稱加密對數(shù)據(jù)執(zhí)行轉(zhuǎn)換,使第三方無法讀取該數(shù)據(jù)。此類型的加密使用單個共享的機(jī)密密鑰來加密和解密數(shù)據(jù)。公鑰加密即不對稱加密,對數(shù)據(jù)執(zhí)行轉(zhuǎn)換,使第三方無法讀取該數(shù)據(jù)。此類加密使用公鑰/私鑰對來加密和解密數(shù)據(jù)。加密簽名,通過創(chuàng)建對特定方唯一的數(shù)字簽名來幫助驗(yàn)證數(shù)據(jù)是否發(fā)自特定方。加密哈希,將數(shù)據(jù)從任意長度映射為定長字節(jié)序列,哈希在統(tǒng)計上是唯一的;不同的雙字節(jié)序列不會哈希為同一個值。</p>&l
27、t;p> 學(xué)習(xí)加密解密這方面技術(shù),對自身的提高很有好處??梢酝ㄟ^跟蹤軟件,提高自己的調(diào)試技能,并且能了解他人程序思路,使自己寫出更好的程序。有助于掌握一些系統(tǒng)底層知識,系統(tǒng)底層知識絕對是構(gòu)造起大型軟件的堅(jiān)實(shí)基礎(chǔ)。許多程序發(fā)展,都經(jīng)歷了這一鍛煉過程的。</p><p> 加密解密并非只有匯編一種語言可以用,之所以使用匯編語言進(jìn)行加密解密是為了更好地掌握匯編語言,并把理論所學(xué)運(yùn)用到實(shí)踐中,檢驗(yàn)自己是否真正學(xué)
28、會,并在此過程中提高自己的編程能力,調(diào)試能力。學(xué)習(xí)匯編語言是我們學(xué)習(xí)其他語言的敲門磚,因此這次課程設(shè)計意義很大,加密解密技術(shù)在實(shí)際生活中運(yùn)用也很廣泛,值得一學(xué)。</p><p><b> 3方案設(shè)計</b></p><p><b> 3.1加密方式</b></p><p> 數(shù)據(jù)的加密解密有很多種算法,其中最基礎(chǔ)的就
29、是加、減、乘、除以及邏輯運(yùn)算等算法,在這幾種基本算法的基礎(chǔ)上可以設(shè)計出更復(fù)雜更安全更能讓人難以破解加密解密算法。沒有萬能的算法,任何算法都是可以被破解的,加密的作用就是在時間上加設(shè)門檻。凱撒加密法是一種簡單的消息編碼方式:它根據(jù)字母表將消息中的每個字母移動常量位k。舉個例子如果k等于4,則在編碼后的消息中,每個字母都會向前移動4位:a會被替換為e;b會被替換成f;依此類推。字母表末尾將回卷到字母表開頭。于是,w會被替換為a,x會被替換為
30、b。</p><p><b> 3.2方案比較</b></p><p> 方案一:設(shè)計自己的密鑰,然后對需要加密的數(shù)據(jù)先左移4位,再對其進(jìn)行異或,得到加密后的數(shù)據(jù),解密只需再次異或移位便可得到。</p><p> 方案二:對需要加密的數(shù)據(jù)進(jìn)行分類,數(shù)字則減1加密,字母則加4加密,得到加密后的數(shù)據(jù),解密只需對數(shù)字加1,字母減4。</p
31、><p> 對數(shù)據(jù)進(jìn)行異或加密容易超出字母和數(shù)字表示范圍,產(chǎn)生特殊符號和圖案,不易控制,這次設(shè)計主要針對普通數(shù)字和字母的加密,因此方案二比較適合。</p><p><b> 3.3設(shè)計思路</b></p><p> 本次設(shè)計主要針對輸入的數(shù)字和字母進(jìn)行加減加密,采用的方法為輸入數(shù)據(jù)后,若第一個數(shù)據(jù)為E或e則把e或E后面的數(shù)字減1字母加4做為加
32、密后的數(shù)據(jù),若要對一組數(shù)據(jù)解密,則輸入R或r并在其后輸入想要解密的數(shù)據(jù),程序運(yùn)行后便會還原數(shù)據(jù),得到解密后的數(shù)據(jù)。加密過程中會由于加密后數(shù)據(jù)超出數(shù)字或字符可以表示的范圍,數(shù)子9加1后超出范圍,因此可以用9減去9,得0來表示數(shù)字9加密后的數(shù)據(jù);字母W/w,X/x,Y/y,Z/z加4后也會超出字母表示范圍,因此可以減去26,得A/a,B/b,C/c,D/d分別作為其加密后的數(shù)據(jù)。</p><p><b>
33、 4設(shè)計功能模塊概述</b></p><p><b> 4.1程序所需模塊</b></p><p> 根據(jù)程序設(shè)計要求,可寫出該程序所需各主要的功能模塊:字符循環(huán)輸入模塊、字符串輸出模塊、響鈴模塊、功能選擇模塊、加密模塊、解密模塊、程序退出模塊。程序功能模塊流程圖如圖4-1所示。</p><p> 圖4-1程序功能模塊流程圖&
34、lt;/p><p><b> 4.2程序運(yùn)行界面</b></p><p> 字符串顯示子程序流程圖如圖4-2所示。</p><p> 圖4-2字符串顯示子程序流程圖</p><p> 好看的運(yùn)行界面可以給用戶一種賞心悅目的感覺,本次設(shè)計主要利用匯編語言編寫程序并在DOS環(huán)境下運(yùn)行,因此可以使用DATA SEGMEN
35、T指令定義數(shù)據(jù)段顯示自己設(shè)計的界面。</p><p> 可以加入自己設(shè)計的圖案或字符串,采用9號功能調(diào)用,輸出多字符串,因此其結(jié)尾必須以‘$’結(jié)尾,自定義界面程序代碼格式如下:</p><p> DATA SEGMENT</p><p> HEADMSGDB0DH,0AH‘ ’,'$'</p><p> 字符串顯
36、示過程子程序程序代碼如下:</p><p> DISPPROCNEAR;顯示字符串子程序 </p><p><b> MOVAH,9</b></p><p><b> INT21H </b></p><p><b> RET </b></p>
37、<p><b> DISPENDP</b></p><p><b> 4.3響鈴程序</b></p><p> 根據(jù)設(shè)計要求,程序運(yùn)行后,首先顯示‘Please Input Data:’,并響鈴一聲,響鈴程序可以利用2號功能調(diào)用,07H為響鈴的ASCII碼,響鈴程序代碼如下:</p><p> MOV
38、 DL,07H ;設(shè)置響鈴聲</p><p> MOV AH,2</p><p> INT 21H ;輸出響鈴聲</p><p><b> 4.4功能選擇程序</b></p><p> 用比較指令CMP選擇所需程序?qū)崿F(xiàn)的功能,如果輸入的字符
39、串首字符為E或e則進(jìn)入加密子程序;如果輸入的字符串中首字符為R或r則進(jìn)入解密子程序;如果輸入的字符串中首字符為Q或q則進(jìn)入退出子程序。如果輸入的字符中首字符非前三種情況則會提醒你再次輸入,直到輸入的首字符為前面三種情況中的一種為止。功能選擇程序流程圖如圖4-3所示。</p><p> 圖4-3功能選擇程序流程圖</p><p> 4.5數(shù)據(jù)循環(huán)輸入子程序</p><
40、p> 采用1號DOS功能調(diào)用命令,循環(huán)輸入單個字符并保存數(shù)據(jù),加密解密均是以單個字符為單位進(jìn)行,這樣就不會由于一個字符加密后產(chǎn)生的進(jìn)位影響到其他字符,造成加密解密結(jié)果失真。采用的是FOR循環(huán)語句,并在輸入最后一個字符后,加‘$’字符結(jié)束輸入,直至鍵入回車符終止子程序返回主程序,因此還要用到比較指令CMP或TEST指令。</p><p> 循環(huán)輸入程序流程圖如圖4-4所示。</p><
41、p> 圖4-4循環(huán)輸入程序流程圖</p><p><b> 4.6加密過程程序</b></p><p> 主要針對輸入的數(shù)字和字母進(jìn)行加密,采用的方法為,輸入數(shù)據(jù)后,若第一個數(shù)據(jù)為E或e,則把e或E后面的數(shù)字減1字母加4作為加密后的數(shù)據(jù)。對于數(shù)字0減1后小于0,需直接加上9,變成9,對于W/w,X/x,Y/y,Z/z加4后會超出字母范圍因此需減去26,變?yōu)?/p>
42、A/a,B/b,C/c,D/d。</p><p> 程序中判斷語句應(yīng)用CMP或者TEST指令以免產(chǎn)生運(yùn)算結(jié)果,破壞數(shù)據(jù)。由于是一位一位的進(jìn)行數(shù)據(jù)加密,因此需要時刻判斷當(dāng)前字符是否為‘$’,因?yàn)樽址且浴?’結(jié)尾的。加密過程的關(guān)鍵在于,判斷字符類型及加密后如何對數(shù)據(jù)進(jìn)行保存并保護(hù),該過程中對子程序的調(diào)用應(yīng)用非常多,可見子程序?qū)τ诔绦虻闹匾饔谩?lt;/p><p> 加密過程程序流程圖如圖
43、4-5所示。</p><p> 圖4-5加密過程程序流程圖</p><p><b> 4.7解密過程程序</b></p><p> 解密為加密的逆過程,即輸入數(shù)據(jù)后,若第一個數(shù)據(jù)為R或r,則把R或r后面的數(shù)字加1字母減4作為解密后的數(shù)據(jù)。由于數(shù)字0減1后小于0,需直接加上9變?yōu)?,對于W/w,X/x,Y/y,Z/z加4后會超出字母范圍因此
44、需減去26變成A/a,B/b,C/c,D/d。因此當(dāng)輸入數(shù)據(jù)9以后,應(yīng)直接將其減9變?yōu)?,當(dāng)輸入A/a,B/b,C/c,D/d時,應(yīng)先減去4再加上26,變成W/w,X/x,Y/y,Z/z。和加密過程類似,也許判斷輸入字符是否為‘$’,以決定是否完成輸入進(jìn)行解密過程。不同類型所以加密算法不同,因此解密的關(guān)鍵就是運(yùn)用對應(yīng)加密算法的逆運(yùn)算進(jìn)行解密,可見對字符類型的判斷很重要。</p><p> 解密過程程序流程圖如圖
45、4-6所示。</p><p> 圖4-6解密過程程序流程圖</p><p><b> 4.8退出程序</b></p><p> 當(dāng)?shù)谝粋€輸入數(shù)據(jù)為字母Q/q時,開始運(yùn)行退出程序,提示“DO YOU WANT TO EXIT THIS PROGRAM?(Y/N):”輸入Y則退出程序,輸入N則提示:“PLEASE INPUT DATA:”。退
46、出程序所用指令較為簡單,就是簡單地9號DOS功能調(diào)用字符輸入、CMP比較判斷指令、以及基本的跳轉(zhuǎn)指令即可實(shí)現(xiàn)。退出程序雖然簡單,但在程序中的重要性不言而喻,退出程序不當(dāng)會給用戶以不好的客戶體驗(yàn),甚至造成數(shù)據(jù)丟失,程序運(yùn)行失敗等問題。</p><p> 退出程序流程圖如圖4-7所示。</p><p> 圖4-7退出程序流程圖</p><p> 5總體程序及運(yùn)行結(jié)
47、果</p><p> 5.1總體程序流程圖</p><p> 將前面介紹的各個模塊連接起來即為完整的加密解密程序,程序完整代碼見附錄部分。整體程序流程圖如圖5-1所示。</p><p> 圖5-1整體程序流程圖</p><p><b> 5.2程序調(diào)試</b></p><p> (1)在
48、編寫代碼時,我遇到了很多問題,例如簡單的跳轉(zhuǎn)指令在程序中有字節(jié)范圍限制,因此要用到子程序調(diào)用,然而子程序的調(diào)用我都沒怎么接觸過,所以要去查資料 在翻閱資料和閱讀相關(guān)的例子后,終于了解并掌握了子程序的功能。</p><p> (2)寫完代碼,進(jìn)入到程序的調(diào)試階段,在這里遇到很多的問題。</p><p> 1)在定義顯示的菜單界面的時候,因?yàn)槭禽敵鲎址谧址鬀]用‘$’結(jié)束,出現(xiàn)錯
49、誤。出現(xiàn)這一問題,是因?yàn)檫\(yùn)用9號功能調(diào)用,其結(jié)尾的那一個字符必須是‘$’,只需在其結(jié)尾加上‘$’就可以。 </p><p> 2)在用到接收的單個字符時,直接用寄存器來存儲,當(dāng)要調(diào)用時,就沒發(fā)現(xiàn)已不存在了,調(diào)試時就出現(xiàn)了錯誤。為了解決這個問題,我們可以開辟一個內(nèi)存空間,把輸入的單個字符存入里面,連回車字符也存入,當(dāng)要調(diào)用時,就把這空間的首個單元取出便可。</p><p> 3)在運(yùn)用比
50、較CMP的跳轉(zhuǎn)時,當(dāng)超過128個字節(jié)時,編譯時就會出錯。解決這個問題可以在跳轉(zhuǎn)語句和被跳轉(zhuǎn)的語句之間加個中間量,這樣就可以在編譯時沒問題了。</p><p> 4)程序運(yùn)行后出現(xiàn)亂碼現(xiàn)象,解決之一問題需要在調(diào)用輸出子程序前,將以前存入的舊數(shù)據(jù)清零,可使用指令XOR,AND等。</p><p><b> 5.3程序運(yùn)行結(jié)果</b></p><p&
51、gt; 在接口試驗(yàn)平臺集成環(huán)境中運(yùn)行該程序,點(diǎn)擊匯編、連接、運(yùn)行后得到程序顯示的菜單界面。自定義的菜界面里有顯示此程序的使用方法并提示輸入數(shù)據(jù)(PLEASE INPUT DATA:),對程序的使用非常方便,這種人機(jī)交互式的軟件程序最易被用戶承認(rèn)并喜愛。程序運(yùn)行菜單界面如圖5-2所示。</p><p> 圖5-2程序運(yùn)行菜單界面</p><p> 輸入數(shù)據(jù)EWZ5CS按回車鍵運(yùn)行程序,
52、界面上顯示的鎖形表示數(shù)據(jù)已加密,為AD4GW。程序加密界面如圖5-3所示。</p><p> 圖5-3程序加密界面</p><p> 輸入數(shù)據(jù)R4DAGW按回車鍵后程序運(yùn)行,圖中顯示的鑰匙形表示數(shù)據(jù)已解密,為WZ5CS。程序解密界面如圖5-4所示。</p><p> 圖5-4程序解密界面</p><p> 如果想退出程序則輸入字母Q或
53、q,按回車鍵運(yùn)行后結(jié)果如圖5-5所示,提示“DO YOU WANT TO EXIT THIS PROGRAM?(Y/N):”。程序退出選擇界面如圖5-5所示。</p><p> 圖5-5程序退出選擇界面</p><p> 輸入Y或y程序結(jié)束,回到集成環(huán)境窗口。輸入N或n回到程序開始菜單,提示“PLEASE INPUT DATA:”,運(yùn)行后如圖5-6。返回程序開始菜單界面如圖5-6所示。
54、</p><p> 圖5-6返回程序開始菜單界面</p><p> 如果輸入數(shù)據(jù)不是E/e,R/r,Q/q,運(yùn)行程序,同樣提示“PLEASE INPUT DATA:”,運(yùn)行后如圖5-7。輸入錯誤界面如圖5-7所示。</p><p> 圖5-7輸入錯誤界面</p><p> 6課程設(shè)計收獲及心得體會</p><p&g
55、t; 本次設(shè)計用的是8086匯編語言來設(shè)計程序,使它能夠?qū)W(wǎng)絡(luò)信息的原始數(shù)據(jù)進(jìn)行加密保護(hù)和解密使用。數(shù)據(jù)加密和解密功能的實(shí)現(xiàn)是利用對數(shù)據(jù)的ASCII碼進(jìn)行加減運(yùn)算,使它改寫為另一組數(shù)據(jù),隱藏了原數(shù)據(jù),使他人不能看到,從而保證了原數(shù)據(jù)的安全。</p><p> 作為自動化專業(yè)的學(xué)生,對計算機(jī)的使用是不可避免的,本專業(yè)很多方面都必須要通過計算機(jī)來實(shí)現(xiàn)。計算機(jī)已成了我們學(xué)習(xí)和工作必不可少的工具,然而計算機(jī)作為網(wǎng)絡(luò)中
56、的核心部分也是最不安全的,大量的信息用數(shù)據(jù)的形式存放在計算機(jī)系統(tǒng)里。信息的傳輸則是通過公共信道。這些計算機(jī)系統(tǒng)和信道是不設(shè)防的,很脆弱的,很容易受到攻擊和破壞,因而我們需要一種措施來保護(hù)我們的數(shù)據(jù),防止被一些用心不良的人盜取或破壞。</p><p> 這次微機(jī)原理課程設(shè)計讓我學(xué)到很多很多的東西,不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識,解決了很多疑惑。通過課程設(shè)計,我了解和熟練匯
57、編語言中的各種指令,學(xué)會編寫匯編程序,培養(yǎng)了獨(dú)立動手和獨(dú)立思考的能力,提高自主創(chuàng)新思維水平,學(xué)會了查找資料,應(yīng)用資料,并養(yǎng)成分類收藏資料的習(xí)慣。</p><p> 以前在上課的時候,老師經(jīng)常強(qiáng)調(diào)在寫一個程序的時候,一定要事先把程序流程圖出來,但是我總覺得這樣做沒必要,很浪費(fèi)時間。但是,這次課程設(shè)計改變了我以前的那種錯誤的認(rèn)識,以前我接觸的那些程序都是很短、很基礎(chǔ)的,但是在課程設(shè)計中碰到的那些需要很多代碼才能完成
58、的任務(wù),畫程序流程圖是很有必要的。因?yàn)橥ㄟ^程序方框圖,在做設(shè)計的過程中,我們每一步要做什么,每一步要完成什么任務(wù)都有一個很清楚的思路,而且在程序測試的過程中也有利于查錯。</p><p><b> 參考文獻(xiàn)</b></p><p> 彭虎,周佩玲,傅忠謙.微機(jī)原理與接口技術(shù)(第3版).北京:電子工業(yè)出版社,2011.8.</p><p>
59、 RichardC.Detemer(作者),鄭紅(譯者),陳麗瓊(譯者),8086匯編語言基礎(chǔ)教程.北京:機(jī)械工業(yè)出版社,2009.</p><p> 溫玉杰.Intel匯編語言程序設(shè)計(第四版).北京:電子工業(yè)出版社,2004.</p><p> 卜艷萍,周偉.匯編語言程序設(shè)計教程.北京:清華大學(xué)出版社,2004.</p><p> 沈美明.IBM-PC匯編
60、語言程序設(shè)計.北京:清華大學(xué)出版社,2000.</p><p> 段鋼.加密與解密(第3版).北京:電子工業(yè)出版社,2008.</p><p> 王爽.匯編語言(第2版).北京:清華大學(xué)出版社,2008.</p><p><b> 附錄</b></p><p> 本次設(shè)計的完整程序代碼如下:</p>
61、<p> DATA SEGMENT ;定義數(shù)據(jù)段 </p><p> HEAD0DB' ',0DH,0AH </p><p> DB'+-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
62、39;,0DH,0AH</p><p> DB'| WELCOME! *',0DH,0AH</p><p> DB'*A IF YOU WANNA ENCRYPT |',0DH,0AH</p&
63、gt;<p> DB'| PLEASE INPUT BYM START WITH A LETTER E OR e! *',0DH,0AH</p><p> DB'*B IF YOU WANNA DECRYPT |',0DH,0AH</p><p> DB
64、'| PLEASE INPUT BYM START WITH A LETTER R OR r! *',0DH,0AH</p><p> DB'*C IF YOU WANNA EXIT THIS PROGRAM |',0DH,0AH</p><p> DB'| PLEASE P
65、RESS Q OR q! *',0DH,0AH</p><p> DB'+-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*',0DH,0AH,'$'</p><p> HEAD1DB 0DH,0AH,'P
66、LEASE INPUT DATA:','$'</p><p> HEAD2 DB' ',0DH,0AH</p><p> DB' ********* ',0DH,0AH </p><p> DB' *
67、* ** ',0DH,0AH </p><p> DB' ** ** ',0DH,0AH </p><p> DB' &&&&&&&&&&&&&&&am
68、p; ',0DH,0AH</p><p> DB' & wangjianhua & ',0DH,0AH </p><p> DB' & automation & ',0DH,0AH </p><p> DB' & 1005 class &
69、',0DH,0AH </p><p> DB' &*****^^^*****& ',0DH,0AH</p><p> DB 0DH,0AH,'AFTER ENCRYPTING:','$' </p><p> HEAD3 DB' ',0DH,0AH
70、 </p><p> DB' ******** ',0DH,0AH</p><p> DB' * * ',0DH,0AH</p><p> DB' * **** *********
71、*********** ',0DH,0AH</p><p> DB' * * * * * * * ',0DH,0AH</p><p> DB' * **** ******************** ',0DH,0AH</p><p> DB'
72、 * * ',0DH,0AH</p><p> DB' ******** ',0DH,0AH</p><p> DB 0DH,0AH,'AFTER DECRYPTING:','$'</p><p>
73、; HEAD4DB0DH,0AH,'DO YOU WANT TO EXIT THIS PROGRAM?(Y/N):','$'</p><p> HEAD5 DB' ',0DH,0AH</p><p> DB' ',0DH,0AH</p><p> DB&
74、#39; ',0DH,0AH,'$'</p><p> BUFF DB 100 DUP(0)</p><p> ENCRYPTION DB 100DUP (0) </p><p> DECRYPTION DB 100DUP (0) </p><p>
75、DATAENDS </p><p> CODESEGMENT </p><p> ASSUME CS:CODE,DS:DATA</p><p><b> START: </b></p><p> MOV AX,DATA</p><p> MOV DS,AX</p>
76、<p> MOV AH,9;請求輸出</p><p> MOV AL,'*'</p><p> MOV CX,63;連續(xù)63個*</p><p><b> INT 10H</b></p><p> LEA DX,HEAD0;輸出HE
77、AD0數(shù)據(jù)段</p><p> CALL DISP</p><p> MOV DL,07H ;設(shè)置響鈴聲</p><p><b> MOV AH,2</b></p><p> INT 21H ;輸出響鈴聲</p><p>
78、MOV AH,9 ;請求輸出 </p><p> MOV AL,'*' </p><p> MOV CX,63 ;連續(xù)63個*</p><p> INT 10H</p><p> CALLCY
79、CLE</p><p> CYCLEPROCNEAR;選擇程序</p><p> LEADX,HEAD1 ;提示PLEASE INPUT DATA: </p><p> CALLDISP</p><p> XORSI,SI</p><p> MOVAH,1
80、 ;輸入并比較</p><p><b> INT21H</b></p><p> CMPAL,'E'</p><p> JEJ1;若輸入為E則接到J1</p><p> CMPAL,'e';若輸入為e則接到J1<
81、;/p><p><b> JEJ1 </b></p><p> CMPAL,'R';若輸入為R則接到J2</p><p><b> JEJ2</b></p><p> CMPAL,'r';若輸入為r則接到J2<
82、;/p><p><b> JEJ2</b></p><p> CMPAL,'Q';若輸入為Q則接到EC1</p><p><b> JEESC1</b></p><p> CMPAL,'q';若輸入為q則接到EC1&
83、lt;/p><p><b> JEESC1</b></p><p> JMP CYCLE</p><p><b> J1:</b></p><p> CALLJIAMI;把J1定義為子程序JIAMI </p><p> J2:
84、 </p><p> CALLJIEMI;把J2定義為子程序JIEMI</p><p><b> ESC1:</b></p><p> CALLEXIT ;把ESC1定義為子程序EXIT</p><p><b> RET
85、 </b></p><p> CYCLE ENDP</p><p> DISPPROCNEAR;顯示字符串子程序 </p><p><b> MOVAH,9</b></p><p><b> INT21H </b></p><p&
86、gt;<b> RET </b></p><p><b> DISPENDP</b></p><p> INPUTLOOP PROC NEAR;字符串輸入程序</p><p> FOR:;循環(huán)輸入單個字符</p><p> MOV AH,01H
87、</p><p><b> INT21H</b></p><p> CMPAL,0DH;判斷是否回車?</p><p> JEFINISHE</p><p> MOV BUFF[SI],AL;保存輸入數(shù)據(jù)</p><p> INC SI &
88、lt;/p><p> JMP FOR </p><p><b> FINISHE: </b></p><p> MOVBUFF[SI],24H;輸入'$',輸入結(jié)束</p><p><b> RET </b></p><p> INP
89、UTLOOP ENDP</p><p> JIAMIPROCNEAR;加密選擇</p><p> CALLINPUTLOOP</p><p><b> XORDI,DI</b></p><p> XOR SI,SI</p><p> LEA SI,
90、ENCRYPTION;取首地址</p><p> LEA DI,BUFF</p><p> CALLENCRYPTIONPROC</p><p><b> RET </b></p><p> JIAMIENDP</p><p> ENCRYPTIONPROC PROC
91、 NEAR;加密過程程序 </p><p><b> PROC1:</b></p><p> XOR AX,AX</p><p> MOV AL,[DI]</p><p> CMP AL,24H</p><p> JZ ORDER;輸入
92、數(shù)據(jù)為'$'則跳轉(zhuǎn)到ORDEER </p><p> CMP AL,30H </p><p> JZ T11;輸入數(shù)據(jù)為0則跳轉(zhuǎn)到T11 </p><p> CMP AL,':'</p><p> JB T12
93、;有輸入數(shù)據(jù)不大于9則接到T12 </p><p> CMP AL,'A'</p><p> JC NEXT;小于'A'不用處理,轉(zhuǎn)移到下一個</p><p> CMP AL,'{' </p><p> JNC
94、 NEXT ;大于'z'不用處理,轉(zhuǎn)移到下一個</p><p> CMP AL,'a'</p><p> JC BIG ;小于'a'可能是大寫,轉(zhuǎn)移</p><p> ADD AL, 4
95、 ;加密</p><p> CMP AL,'{'</p><p> JNC J26 ;大于'z',超過了最后的字母,應(yīng)減去26</p><p> JMP NEXT </p><p><b> BIG:</b&
96、gt;</p><p> XOR AX,AX</p><p> MOV AX,[DI]</p><p> CMP AL,'['</p><p> JNC NEXT ;大于'Z'不用處理,轉(zhuǎn)移到下一個</p><p> ADD AL,4
97、;加密</p><p> CMP AL,'['</p><p> JNC J26 ;大于'Z',超過了最后的字母,應(yīng)減去26</p><p> JMP NEXT</p><p><b> J26:</b><
98、/p><p> SUB AL,26</p><p><b> NEXT:</b></p><p> MOV [SI],AX;保存密碼</p><p><b> INC DI</b></p><p><b> INC SI</b
99、></p><p> JMP PROC1</p><p><b> T12:</b></p><p> SUBAL,01H;把輸入的數(shù)據(jù)除減01</p><p> MOV [SI],AL</p><p><b> INCDI</b>&
100、lt;/p><p><b> INC SI</b></p><p> JMP PROC1</p><p><b> T11: </b></p><p> ADD AL,09H;把輸入的數(shù)為0則其ASC碼加09H</p><p> MOV [
101、SI],AL</p><p><b> INC DI</b></p><p><b> INC SI</b></p><p> JMP PROC1</p><p><b> ORDER:</b></p><p><b> X
102、ORDX,DX</b></p><p> LEADX,HEAD2</p><p> CALL DISP;輸出數(shù)據(jù)段HEAD2</p><p> XOR DX,DX</p><p> LEADX,ENCRYPTION;輸出加密后字符串</p><p>&l
103、t;b> CALLDISP</b></p><p><b> XORDX,DX</b></p><p> LEADX,HEAD5;輸出兩行空格行 </p><p><b> CALLDISP</b></p><p> CALLCYCLE </
104、p><p><b> RET </b></p><p> ENCRYPTIONPROCENDP</p><p> JIEMIPROCNEAR;解密選擇</p><p> CALLINPUTLOOP</p><p> XORSI,SI</p><
105、;p> LEASI,DECRYPTION</p><p> LEADI,BUFF</p><p> CALLDECRYPTIONPROC</p><p><b> RET</b></p><p> JIEMIENDP</p><p> DECRYPTIONPROC
106、 PROCNEAR;解密過程程序</p><p><b> PROC2:</b></p><p> MOVAL,[DI]</p><p> CMPAL,'$' </p><p> JZORDER2;輸入數(shù)據(jù)為'$'則跳轉(zhuǎn)至ORDER2</p&
107、gt;<p> CMPAL,39H;若有輸入的數(shù)據(jù)為9則接到T21</p><p><b> JET21</b></p><p> CMP AL,39H</p><p> JC T22;有輸入數(shù)據(jù)小于于9則接到T22 </p><p> CMP
108、 AL,'@'</p><p> JC NEXT1;小于'A'不用處理,轉(zhuǎn)移到下一個</p><p> CMP AL,'{' </p><p> JNC NEXT1;大于'z'不用處理,轉(zhuǎn)移到下一個</p><p> CM
109、P AL,'a'</p><p> JC BIG1;小于'a'可能是大寫,轉(zhuǎn)移到BIG1</p><p> SUB AL, 4;解密</p><p> CMP AL,60H</p><p> JBE J26;小于'a
110、39;,應(yīng)加上26</p><p> JMP NEXT1</p><p><b> BIG1:</b></p><p> XOR AX,AX</p><p> MOV AX,[DI]</p><p> CMP AL,'[' </p>
111、<p> JNC NEXT1;大于'Z'不用處理,轉(zhuǎn)移到下一個</p><p> SUB AL,4</p><p> CMP AL,'@'</p><p> JBE J_26;小于‘A’,超出了最小的字母,應(yīng)加上26</p><p>
112、 JMP NEXT1</p><p><b> J_26:</b></p><p> ADD AL,26</p><p><b> NEXT1:</b></p><p> MOV [SI],AX;保存明碼</p><p> INC
113、 DI</p><p> INC SI</p><p> JMP PROC2</p><p><b> T21:</b></p><p> SUBAL,09H;有數(shù)據(jù)等于9則其ASCII碼減09 </p><p><b> CBW</b
114、></p><p> MOV[SI],AX</p><p><b> INCSI</b></p><p><b> INCDI</b></p><p> JMPPROC2</p><p><b> T22: </b><
115、;/p><p> ADD AL,01H;把輸入的數(shù)據(jù)加01</p><p> MOV [SI],AL</p><p><b> INCDI</b></p><p><b> INCSI</b></p><p> JMP PROC2&
116、lt;/p><p><b> ORDER2:</b></p><p> XOR AX,AX</p><p> XORDX,DX</p><p> LEADX,HEAD3</p><p> CALLDISP;輸出數(shù)據(jù)段HEAD3</p><
117、;p> XORDX,DX</p><p> LEADX,DECRYPTION;輸出解密后字符串 </p><p> CALLDISP</p><p> XORDX,DX</p><p> LEADX,HEAD5;輸出兩個空格行 </p><p> CALLD
118、ISP</p><p> CALLCYCLE</p><p><b> RET </b></p><p> DECRYPTIONPROC ENDP</p><p> EXITPROCNEAR;退出程序</p><p><b> CYCLE1:&l
119、t;/b></p><p> XORDX,DX</p><p> LEADX,HEAD4;輸出DO YOU WANT TO QUIT THIS PROGRAM? </p><p> CALLDISP</p><p> MOVAH,1;選擇輸入</p><p>
120、<b> INT21H</b></p><p> CMPAL,59H;若輸入Y則退出程序 </p><p> JEOUTCX</p><p> CMPAL,79H;若輸入y則退出程序 </p><p> JEOUTCX</p><p>
121、; CMPAL,4EH </p><p><b> JEA1</b></p><p> CMPAL,6EH</p><p><b> JEA1</b></p><p> JMPCYCLE1;輸入E或e回到程序</p><p>
122、<b> OUTCX:</b></p><p> MOVAH,4CH</p><p><b> INT21H</b></p><p><b> A1:</b></p><p> CALLCYCLE</p><p><b>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 加密解密程序設(shè)計課程設(shè)計
- 微機(jī)原理課程設(shè)計--代碼轉(zhuǎn)換程序設(shè)計
- 微機(jī)原理課程設(shè)計----進(jìn)制轉(zhuǎn)換程序設(shè)計
- 微機(jī)原理-課程設(shè)計電風(fēng)扇程序設(shè)計
- 微機(jī)原理課程設(shè)計--信號發(fā)生器功能程序設(shè)計
- 鍵盤鋼琴匯編語言程序設(shè)計—微機(jī)原理課程設(shè)計
- 鍵盤鋼琴匯編語言程序設(shè)計—微機(jī)原理課程設(shè)計
- 微機(jī)原理課程設(shè)計---動畫心匯編程序設(shè)計
- 鍵盤鋼琴匯編語言程序設(shè)計—微機(jī)原理課程設(shè)計
- 微機(jī)原理課程設(shè)計---霓虹燈的模擬顯示程序設(shè)計
- 加密與解密課程設(shè)計
- 《微機(jī)原理與接口技術(shù)》課程設(shè)計--雙機(jī)串行通訊程序設(shè)計
- 微機(jī)原理課程設(shè)計---選擇多功能程序設(shè)計——軟件開發(fā)方向
- 微機(jī)原理課程設(shè)計----打字練習(xí)程序
- java課程設(shè)計--加密與解密
- java課程設(shè)計---加密和解密
- java文件加密解密課程設(shè)計
- 微機(jī)原理與接口技術(shù)課程設(shè)計---字符串程序設(shè)計
- 微機(jī)原理課程設(shè)計報告--小鳥動畫程序
- 組成原理課程設(shè)計報告---微程序設(shè)計
評論
0/150
提交評論