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

正文內(nèi)容

md5及生日攻擊的分析及java編程畢業(yè)論文(編輯修改稿)

2024-07-19 12:46 本頁面
 

【文章內(nèi)容簡介】 實(shí)身份,防止盜用他人帳號(hào)。 本課題的主要研究內(nèi)容及設(shè)想經(jīng)過查閱大量的資料,我發(fā)現(xiàn)許多實(shí)際應(yīng)用的 MD5 系統(tǒng)都是用 C 語言編寫的,而用 Java 語言編寫的卻沒有,Java 語言是現(xiàn)行網(wǎng)絡(luò)上流行的跨平臺(tái)語言,具有很多其他語言沒有的優(yōu)點(diǎn),很適合編寫 MD5 系統(tǒng),本課題的主要研究內(nèi)容是 MD5 算法分析和對(duì) MD5 散列算法生日攻擊的實(shí)際應(yīng)用。具體研究設(shè)想是首先學(xué)習(xí) MD5 算法和生日攻擊原理,分析出它的編程思路,然后學(xué)習(xí) Java 語言,進(jìn)而編寫出能實(shí)際運(yùn)用的 MD5 鑒別系統(tǒng)軟件,和對(duì) MD5 散列算法生日攻擊的試驗(yàn)程序。鑒于 JAVA 語言不但適用于一般大規(guī)模軟件工程項(xiàng)目的開發(fā),也適用于網(wǎng)絡(luò)程序設(shè)計(jì),已經(jīng)有人成功的對(duì) MD4 和 MD5 系統(tǒng)成功地進(jìn)行了攻擊,因此有必要開發(fā)出 MD5 系統(tǒng)的 JAVA 程序并驗(yàn)證出生日攻擊的有效性,以適應(yīng)國內(nèi)網(wǎng)絡(luò)安全技術(shù)的發(fā)展。第 2 章 JAVA 編程語言通過對(duì)國內(nèi)外現(xiàn)有的密碼產(chǎn)品的調(diào)查,我發(fā)現(xiàn)現(xiàn)在國內(nèi)許多產(chǎn)品都是由 C 語言編寫的,幾乎沒有用 JAVA 語言編寫的程序,我通過對(duì)密碼和JAVA 語言的學(xué)習(xí)發(fā)現(xiàn) JAVA 是一種非常適合密碼程序的編程語言。在本設(shè)計(jì)中,我選擇了 JAVA 作為 MD5 散列算法的編程語言?;?JAVA 語言的 MD5 系統(tǒng)更加安全,運(yùn)算速度更快并且適用于各種平臺(tái)。本科生畢業(yè)設(shè)計(jì)(論文)7 Java 語言的特點(diǎn)Java 到底是一種什么樣的語言呢?Java 是一種簡單的面象對(duì)象的分布式的解釋的健壯的安全的結(jié)構(gòu)中立的可移植的性能很優(yōu)異的多線程動(dòng)態(tài)語言。它的主要特點(diǎn)有: (1)簡 單Java 最初是為對(duì)家用電器進(jìn)行集成控制而設(shè)計(jì)的一種語,因此它必須簡單明了。Java 語言的簡單性主要體現(xiàn)在以下三個(gè)方面: 的風(fēng)格類似于 C++,因而 C++程序員是非常熟悉的。從某種意義上講,Java 語言是C 及 C++語言的一個(gè)變種,因此,C++程序員可以很快就掌握 Java 編程技術(shù)。 摒棄了 C++中容易引發(fā)程序錯(cuò)誤的地方,如指針和內(nèi)存理。 提供了豐富的類庫。(2)面向?qū)ο竺嫦驅(qū)ο罂梢哉f是 Java 最重要的特性。 Java 語言的設(shè)計(jì)完全是面向?qū)ο蟮?,它不支持類?C 語言那樣的面向過程的程序設(shè)計(jì)技術(shù)。Java 支持靜態(tài)和動(dòng)態(tài)風(fēng)格的代碼繼承及重用。單從面向?qū)ο蟮奶匦詠砜?,Java 類似于SmallTalk,但其它特性、尤其是適用于分布式計(jì)算環(huán)境的特性遠(yuǎn)遠(yuǎn)超越了SmallTalk。(3)分布式的特點(diǎn) Java 支持基于網(wǎng)絡(luò)的應(yīng)用程序,它是一種分布式的語言??赏ㄟ^ 包中的類來支持各種不同類型的網(wǎng)絡(luò)連接。Java 還可以通過Socket 類支持傳統(tǒng)的低級(jí)別的網(wǎng)絡(luò)連接。這些特性使 Java 的解釋器跨網(wǎng)絡(luò)的下載運(yùn)行代碼成為可能,這使得應(yīng)用程序可以動(dòng)態(tài)的擴(kuò)大功能,并適應(yīng)用戶要求的變化。(4)解釋性的語言 Java 語言編譯器產(chǎn)生“字節(jié)碼 ”(bytecode) ,而不是原始的機(jī)器碼。在實(shí)際運(yùn)行 Java 時(shí),需要利用解釋器來執(zhí)行編譯過的字節(jié)碼,所以 Java是一門解釋性的語言。Java 的字節(jié)碼提供了一種與硬件體系無關(guān)的對(duì)象文件格式,該代碼可以在多個(gè)平臺(tái)上高效的傳遞文件。(5)健壯性 Java 從根本上杜絕了某些類型編譯錯(cuò)誤出現(xiàn)的源頭,這使得編寫出可靠的軟件變得比較容易。Java 是強(qiáng)類型語言,它允許有擴(kuò)展的編譯時(shí)間來本科生畢業(yè)設(shè)計(jì)(論文)8檢查潛在的類型不匹配的問題。在內(nèi)存模式方面,Java 不支持指針,這就排除了利用指針改寫內(nèi)存和損壞數(shù)據(jù)的可能性。Java 對(duì)內(nèi)存垃圾的自動(dòng)收集機(jī)制可以防止產(chǎn)生內(nèi)存漏洞。例外處理是 Java 的另一特性,它使程序更加健壯。使用“try/catch/finally”語句可將所有的出錯(cuò)處理代碼集中放在一處,大大簡化了對(duì)出錯(cuò)和程序恢復(fù)任務(wù)的處理。(6)安全性 Java 是一門安全的編程語言。由于 Java 的分布式的本質(zhì),因此安全性被放到了重要的地位,并提供了幾個(gè)層次的安全控制機(jī)制,使計(jì)算機(jī)系統(tǒng)免受惡意代碼的攻擊,并允許用戶放心的運(yùn)行尚未取得信任的程序。(7)體系的中立性 用 Java 編寫的程序被編譯成一種與硬件體系無關(guān)的字節(jié)碼格式。這一機(jī)制的最大好處是 Java 程序可以在任何系統(tǒng)上運(yùn)行,只要該系統(tǒng)能構(gòu)成Java 虛擬機(jī)即可。(8)可移植性 體系中立是可移植性的一個(gè)重要組成部分。Java 在語言規(guī)范方面沒有“相關(guān)實(shí)現(xiàn)” (Implentationdependent)的特點(diǎn),且其環(huán)境本身也可移植到新的硬件平臺(tái)和操作系統(tǒng)中。Java 編譯器是用 Java 寫成的,Java 的運(yùn)行時(shí)間系統(tǒng)用 ANSIC 編寫的,該運(yùn)行時(shí)間系統(tǒng)在“服從 POSIX”(POSIXCompliant)規(guī)范基礎(chǔ)內(nèi)具有良好的可移植性。(9) 高性能性 Java 是一種解釋性語言,永遠(yuǎn)不會(huì)像編譯型語言運(yùn)行那么快,但其速度對(duì)于運(yùn)行交互式的,具有圖形用戶界面和基于網(wǎng)絡(luò)的應(yīng)用程序是足夠快了。對(duì)于對(duì)速度性能要求嚴(yán)格的場(chǎng)合,設(shè)計(jì)師們?cè)O(shè)計(jì)了“Just in Time”的編譯器,該編譯器可以在運(yùn)行時(shí)間內(nèi)在一個(gè)特定的芯片上工作,將 Java 的字節(jié)碼翻譯成機(jī)器碼。SUN 聲稱字節(jié)碼轉(zhuǎn)換為機(jī)器碼的性能幾乎與 C 或C++一樣優(yōu)秀。(10)多線程性 Java 是一種“多線程” (Multithreaded)的語言,它對(duì)多線程提供支持,多線程可以同時(shí)處理不同的任務(wù),改善了具有圖形用戶界面的程序的交互性。Java 內(nèi)置地提供了對(duì)多線程地支持。 包提供了一個(gè) Thread 類,該類支持方法啟動(dòng),運(yùn)行,停止一個(gè)線程,并檢查一個(gè)線程的狀態(tài)。(11)動(dòng)態(tài)性 Java 語言能設(shè)計(jì)成能夠適應(yīng)變化的環(huán)境,它是一種“動(dòng)態(tài)的”語言。本科生畢業(yè)設(shè)計(jì)(論文)9例如,類可以在需要時(shí)才被 Java 裝入,甚至可以跨越網(wǎng)絡(luò)而被裝入。 Java中的運(yùn)行時(shí)間類的定義使得把類動(dòng)態(tài)地鏈入一個(gè)正在運(yùn)行的系統(tǒng)成為可能。(12)豐富的 API 文檔和內(nèi)庫Java 為用戶提供了詳盡的 API 文檔說明。Java 開發(fā)工具包中的內(nèi)庫包羅萬象,應(yīng)有盡有,程序員的開發(fā)工作可以在一個(gè)較高的層次上展開。這也正是 Java 受歡迎的重要原因之一 Java 與 C/C++的區(qū)別Java 可以說是以 C/C++為基礎(chǔ)的,其基本語法與 C/C++非常相似。對(duì)于變量聲明、參數(shù)傳遞、運(yùn)算符、流控制等,Java 使用了和 C/C++相同的傳統(tǒng)。同時(shí),Java 為了實(shí)現(xiàn)其簡單、健壯、安全等特性,擯棄了 C/C++中許多不合理的內(nèi)容。 程序設(shè)計(jì)不同Java 語言的設(shè)計(jì)是面向?qū)ο蟮?,不再支持過程式的設(shè)計(jì)方法。如下:(1) 不再支持頭文件 C/C++中的頭文件在大型系統(tǒng)中,維護(hù)困難。而 Java 不支持頭文件,類成員的類型和訪問權(quán)限都封裝在類中。(2) 不能在所有類之外定義全局變量 C/C++中,不加封裝的全局變量常常造成系統(tǒng)的崩潰。Java 通過在一個(gè)類中定義公用、靜態(tài)的變量來實(shí)現(xiàn)一個(gè)全局變量。(3) 刪除結(jié)構(gòu)和聯(lián)合 C/C++中的結(jié)構(gòu)和聯(lián)合中所有成員公有,這就帶來安全問題。Java 去掉結(jié)構(gòu)和聯(lián)合,所有內(nèi)容都封裝在類中。 數(shù)據(jù)類型不同在 Java 中,除了簡單數(shù)據(jù)類型 ——整數(shù)、實(shí)數(shù)、字符和布爾類型外,其他的數(shù)據(jù)類型都是對(duì)象。另外,在 C/C++中對(duì)于不同的平臺(tái),相同數(shù)據(jù)類型分配不同長度的字節(jié),增加了代碼的移植難度,但在 Java 中,對(duì)同一數(shù)據(jù)類型總是分配固定長度的位數(shù),保證了 Java 的平臺(tái)無關(guān)性。本科生畢業(yè)設(shè)計(jì)(論文)10 內(nèi)存管理不同Java 提供了更加優(yōu)秀的內(nèi)存管理機(jī)制。在 C 中,程序員通過庫函數(shù)malloc()和 free 來分配和釋放內(nèi)存, C++通過運(yùn)算符 new 和 delete 完成。存在的問題是:程序釋放已釋放的內(nèi)存或未分配的內(nèi)存塊時(shí),會(huì)造成系統(tǒng)崩潰;同樣,忘記釋放不再使用的內(nèi)存塊時(shí)也會(huì)逐漸耗盡系統(tǒng)資源。在Java 中,通過運(yùn)算符 new 為數(shù)據(jù)結(jié)構(gòu)對(duì)象分配內(nèi)存,自動(dòng)進(jìn)行管理并進(jìn)行垃圾收集,有效的防止由于程序員誤操作導(dǎo)致的錯(cuò)誤,并更好利用了系統(tǒng)資源。 Java 中不支持指針Java 中不再支持指針,這是 Java 與 C/C++最大的區(qū)別。指針是 C/C++中最靈活、也是最容易出錯(cuò)的數(shù)據(jù)類型,且容易破壞安全性,造成系統(tǒng)的崩潰。而 Java 對(duì)指針進(jìn)行完全的控制,程序員不能直接進(jìn)行任何指針操作。同時(shí),數(shù)組作為類在 Java 中實(shí)現(xiàn),良好的解決了數(shù)組訪問越界這一 C/C++中不作檢查的錯(cuò)誤。 Java 平臺(tái)平臺(tái)是程序運(yùn)行的硬件或軟件環(huán)境。Java 平臺(tái)是一種與具體的軟硬件環(huán)境無關(guān)的平臺(tái)。Java 平臺(tái)由兩部分組成: Java 虛擬機(jī)和 Java 應(yīng)用程序接口(Java API) 。圖 2-1 是一個(gè)運(yùn)行在 Java 平臺(tái)上的 Java 程序,表明了 Java 虛擬機(jī)、Java 平臺(tái)及 Java API 之間的關(guān)系。Java ProgrameJava APIJava Virtual MschineHardwareBased PlatformJavaPlatform本科生畢業(yè)設(shè)計(jì)(論文)11圖 2-1 本章小結(jié)本章介紹了 Java 語言的發(fā)展現(xiàn)狀,特點(diǎn)以及它與 C/C++的不同之處。通過介紹可以使讀者更加清楚選擇 JAVA 作為編程語言的優(yōu)越性。在教學(xué)實(shí)驗(yàn)軟件的設(shè)計(jì)中,非常注重通過界面進(jìn)行人機(jī)交互,用 Java 設(shè)計(jì)界面,源代碼簡便易懂。所以選擇了 Java 作為本次設(shè)計(jì)的編程語言。本章將是編程的基礎(chǔ),是在編程前完成的基礎(chǔ)工作。第 3 章 散列函數(shù)散列(Hashing)是在信息安全中經(jīng)常用到的一種算法。它的作用是用一組固定長度的數(shù)據(jù)去表示一大串?dāng)?shù)據(jù)。針對(duì)兩組不同數(shù)據(jù)的散列結(jié)果應(yīng)當(dāng)是不同的,對(duì)于一組數(shù)據(jù)很小的改變將導(dǎo)致散列結(jié)果是很大的、難以預(yù)測(cè)的改變。同一組散列結(jié)果對(duì)應(yīng)的原始消息無窮多,因此,散列是一種無陷門的單向算法;求解與一個(gè)原始消息散列結(jié)果相同的另一個(gè)消息非常復(fù)雜,以至于幾乎無法做到,因此,散列算法可以安全地用于反篡改和零知識(shí)證明(向?qū)Ψ阶C明自己擁有與對(duì)方相同的某個(gè)信息,而又不將此信息發(fā)出)。其構(gòu)思就是接收一段明文,然后以一種不可逆的方式將它轉(zhuǎn)換成一段(通常更小)密文。理論上,所有可能的明文將散列成一個(gè)唯一的密文,但實(shí)際上通常發(fā)生的不是那樣。大多數(shù)時(shí)候,幾乎有無窮多個(gè)不同的字符串可以產(chǎn)生完全相同的散列值。但是,對(duì)于一個(gè)好的密碼散列函數(shù)來說,在實(shí)踐中應(yīng)該很難有兩個(gè)可理解的字符串散列相同的值。好的散列函數(shù)的另一個(gè)特性是輸出不以任何可辨認(rèn)的方式反映輸入。散列函數(shù)通常產(chǎn)生恒定大小的摘要。許多算法產(chǎn)生很小的摘要,但是,算法的安全性很大程度上取決于結(jié)果摘要的大小。本文研究的 MD5 就是一種能提供 128 位摘要的散列算法。本科生畢業(yè)設(shè)計(jì)(論文)12 散列函數(shù)的定義散列函數(shù) H 是一公開函數(shù),用于將任意長的消息沒 M 映射為較短的、固定長度的一個(gè)值 H(M)為雜湊值、雜湊碼或消息摘要。雜湊碼是消息中所有比特的函數(shù),因此提供了一種錯(cuò)誤檢測(cè)能力,即改變消息中任何一個(gè)比特或幾個(gè)比特都會(huì)使在湊碼發(fā)生改變。散列值是以如下形式的函數(shù) H 產(chǎn)生的:h = H(M)其中,M 是變長的報(bào)文,H(M)是定長的散列值有時(shí)也成作是報(bào)文摘要,在原點(diǎn)被加到該報(bào)文上。散列碼是報(bào)文所有比特的函數(shù)值,它具有差錯(cuò)檢測(cè)能力,也就是說當(dāng)報(bào)文中任意比特或若干比特發(fā)生改變都將導(dǎo)致散列碼發(fā)生變化。接收方通過重算那個(gè)報(bào)文的散列值來鑒別該報(bào)文。因此散列函數(shù)本身不是保密的,因此需要使用一些些手段來保護(hù)散列值。 散列函數(shù)的一般結(jié)構(gòu)在最近幾年,針對(duì)散列函數(shù)的密碼分析攻擊已經(jīng)進(jìn)行了許多工作,也取得了某些成功。圖 31 所示的為具有代表性的安全散列函數(shù)的一般結(jié)構(gòu)。 Y Y Y01 1?L b b b n n IV= n n CV n CV1?L LCV CV0 1 IV = 初值 CV = 鏈接變量 Y = 第 i 個(gè)輸入分組 f = 壓縮算法iL = 輸入的分組數(shù) n = 散列碼長度b = 輸入的分組長度圖 31 安全散列碼的一般結(jié)構(gòu)f f f本科生畢業(yè)設(shè)計(jì)(論文)13Figure 31 General Structure of Secure Hash Code這個(gè)結(jié)構(gòu)由 Merkle 提出,被當(dāng)作是一個(gè)迭代的散列函數(shù)。也是目前大多數(shù)散列函數(shù)的結(jié)構(gòu)。該散列函數(shù)接收一個(gè)輸入報(bào)文,將該報(bào)文分為L-1 個(gè)固定長度為 bbit 的分組,如果最后一個(gè)分組不足 bbit,可以填充
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1