畢業(yè)論文-WEB上用戶口令安全傳輸?shù)难芯颗c實(shí)現(xiàn)_第1頁
畢業(yè)論文-WEB上用戶口令安全傳輸?shù)难芯颗c實(shí)現(xiàn)_第2頁
畢業(yè)論文-WEB上用戶口令安全傳輸?shù)难芯颗c實(shí)現(xiàn)_第3頁
畢業(yè)論文-WEB上用戶口令安全傳輸?shù)难芯颗c實(shí)現(xiàn)_第4頁
畢業(yè)論文-WEB上用戶口令安全傳輸?shù)难芯颗c實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩43頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

PAGE目錄引言………….1網(wǎng)絡(luò)安全…………………….2加密技術(shù)…………………….5MD5工作原理……………….8MD5算法…………………….10結(jié)束語…………………13致謝……………………14參考文獻(xiàn)………………15附錄源代碼……….16PAGE2WEB上用戶口令安全傳輸?shù)难芯颗c實(shí)現(xiàn)摘要:主要闡述利用MD5加密算法來保證WEB上用戶口令的安全傳輸。首先利用MD5對用戶口令進(jìn)行一次加密,然后再利用MD5對該密文和一個(gè)隨機(jī)數(shù)組成的信息進(jìn)行加密,形成網(wǎng)絡(luò)上傳輸?shù)挠脩艨诹?,避免用戶口令以明文的形式在WEB上進(jìn)行傳輸,從而有效地提高認(rèn)證系統(tǒng)中口令傳輸?shù)陌踩浴jP(guān)鍵詞:口令;MD5算法;網(wǎng)絡(luò)安全ThestudyandimplementationoftheSecureTransferofUser’sPasswordonWEBSchoolofAbstract:Inthispaper,wemainlyexpoundhowtotransferourpasswordinsecurityonWEBbymeansofMD5.Firstly,weencryptthepasswordwithMD5andaddarandomnumbertotheencryptedpasswordtoformanewmessage.ThenencryptthemessagewithMD5againtohaveanewencryptedpasswordthatistobetransferredonWEB.EnhancesthesecurityofauthenticationsystembasedonWEBeffectively.Keywords:password;MD5algorithm;networksecurity第一章引言隨著計(jì)算機(jī)網(wǎng)絡(luò)的發(fā)展,網(wǎng)絡(luò)安全問題受到越來越大的關(guān)注。網(wǎng)絡(luò)安全一直是Internet的一個(gè)薄弱環(huán)節(jié),因?yàn)楫?dāng)初設(shè)計(jì)TCP/IP時(shí)并沒有考慮網(wǎng)絡(luò)的安全機(jī)制。如Telnet、Ftp、Email和基于WEB的應(yīng)用系統(tǒng)等都是明文方式傳輸數(shù)據(jù)包,其中就有用戶的帳號和口令等非常重要的數(shù)據(jù)。而這些數(shù)據(jù)包很容易被人通過特定的軟件或硬件工具截取,通過分析數(shù)據(jù)包的內(nèi)容,從而可以獲得用戶的帳號和口令,然后進(jìn)行一些非法的活動(dòng)。因此,用戶ID和口令的安全傳輸?shù)膯栴}越來越受到人們的關(guān)注。Web程序使用一種稱為會(huì)話狀態(tài)管理(sessionstatemanagement)的技術(shù)來跟蹤瀏覽器與服務(wù)器之間的交互,正如超文本傳輸協(xié)議所規(guī)定的那樣,每個(gè)瀏覽器的請求都獨(dú)立于其他瀏覽器,一個(gè)Web程序必須使用一些技巧,如cookie,隱藏的表格字段,或URL重寫,來識(shí)別其與特定的瀏覽器的特定的會(huì)話。大多數(shù)服務(wù)器端開發(fā)環(huán)境如ASP,PHP,ColdFusion等使用cookie。使用會(huì)話狀態(tài)管理的問題是從根本上說它是不安全的,一個(gè)黑客可以在服務(wù)器和用戶瀏覽器之間截取用來管理會(huì)話狀態(tài)的cookie,表格字段值,或是URL,一旦得手,他就可以利用這些信息來接管用戶的會(huì)話。大多數(shù)服務(wù)器端的腳本開發(fā)環(huán)境允許你減少這種危險(xiǎn),例如你可以指定cookie的極短失效時(shí)間,使用難預(yù)測的會(huì)話狀態(tài)信息。然而最安全的還是使用安全套接層(SSL),購買它后,你就可以不僅保護(hù)用戶口令,還可以保護(hù)會(huì)話狀態(tài)管理信息。如果你不使用SSL,讓用戶在你的程序中的安全敏感頁面中每次都重新認(rèn)證是個(gè)好主意,但是從用戶角度出發(fā),這實(shí)在是太麻煩了。最后,你必須考慮你和你的用戶究竟愿意承擔(dān)多大的風(fēng)險(xiǎn)。如果密碼口令被曝光的危險(xiǎn)很高,還是用SSL來構(gòu)建你的程序吧,如果你不能使用SSL,那么就使用基于MD5的登陸過程。這至少能保護(hù)你的用戶的口令。此外,選擇一種允許保護(hù)會(huì)話狀態(tài)信息的服務(wù)器端腳本技術(shù)。通常,當(dāng)用戶不使用SSL(即普通HTTP)登陸時(shí),他(她)的口令從離開瀏覽器起至到達(dá)服務(wù)器為止始終是以明文狀態(tài)暴露的。然而,利用一種稱為單向函數(shù)的數(shù)學(xué)函數(shù)的幫助,我們可以設(shè)計(jì)一種并不暴露用戶口令的登陸計(jì)劃。一個(gè)函數(shù)是一種將集合A的元素映射到集合B的方法,每個(gè)集合A中的元素都對應(yīng)于集合B中的一個(gè)確定元素。而一個(gè)單向函數(shù)的作用就是使逆向的推算非常困難,即,給定集合B的一個(gè)元素,很難從集合A中決定哪個(gè)元素(如果存在的話)是映射到B集合中的這個(gè)元素的。用戶試圖登陸到一個(gè)Web應(yīng)用程序時(shí),服務(wù)器端腳本提供用戶一個(gè)包含有從數(shù)十億可能值中產(chǎn)生的隨機(jī)數(shù)的表格,當(dāng)用戶在此登陸表格中輸入她們的ID和口令,客戶端的腳本將這個(gè)隨機(jī)數(shù)值添加到口令后并加以MD5單向運(yùn)算。通過MD5算法對用戶口令進(jìn)行加密,可以有效提高用戶口令在WEB上傳輸?shù)陌踩?。第二章網(wǎng)絡(luò)安全2.1網(wǎng)絡(luò)安全原則最初的計(jì)算機(jī)應(yīng)用程序通常沒有或很少安全性,這種情況一直持續(xù)了多年,知道人們真正認(rèn)識(shí)到數(shù)據(jù)的重要性之前,人們雖然知道計(jì)算機(jī)數(shù)據(jù)有用,卻沒有加以保護(hù)。開發(fā)處理財(cái)務(wù)和個(gè)人數(shù)據(jù)的計(jì)算機(jī)應(yīng)用程序時(shí),對安全性產(chǎn)生了前所未有的需求。人們認(rèn)識(shí)到,計(jì)算機(jī)數(shù)據(jù)是現(xiàn)代生活的重要方面。因此,安全的不同領(lǐng)域開始受到重視。網(wǎng)絡(luò)安全原則包括保密性、完整性、鑒別、不可抵賴、訪問控制和可用性等原則。保密性原則要求做到只有發(fā)送人和所有的接收人才能訪問消息內(nèi)容。如果非法人員能夠訪問消息內(nèi)容,則破壞了保密性原則。鑒別機(jī)制可以建立身份證明,鑒別過程保證正確標(biāo)識(shí)電子消息或文檔來源。消息內(nèi)容在發(fā)送方發(fā)出后和到達(dá)所有接受方之前發(fā)生改變時(shí),就會(huì)失去消息的完整性。不可抵賴性是不允許發(fā)送消息者拒絕承認(rèn)發(fā)送消息。訪問控制原則確定誰能訪問什么??尚行栽瓌t指定要隨時(shí)向授權(quán)方提供資源。2.2網(wǎng)絡(luò)面臨的安全威脅計(jì)算機(jī)網(wǎng)絡(luò)上的通信面臨以下的4種威脅:截獲:攻擊者從網(wǎng)絡(luò)上竊聽聽人的通信內(nèi)容。中斷:攻擊者有意中斷他人在網(wǎng)絡(luò)上的通信。篡改:攻擊者故意篡改網(wǎng)絡(luò)上傳送的報(bào)文。偽造:攻擊者偽造信息在網(wǎng)絡(luò)上傳送。這些攻擊又分為主動(dòng)攻擊和被動(dòng)攻擊。被動(dòng)攻擊被動(dòng)攻擊的攻擊者只是竊聽或監(jiān)視數(shù)據(jù)傳輸,即取得中途的信息。這里的被動(dòng)攻擊者不對數(shù)據(jù)進(jìn)行任何修改。事實(shí)上,這也使被動(dòng)攻擊很難被發(fā)現(xiàn)。因此,處理被動(dòng)攻擊的一般方法是防止而不是探測與糾正。圖2.1又把被動(dòng)攻擊分成兩類,分別是消息內(nèi)容泄露和通信量分析。被動(dòng)攻擊(截獲)被動(dòng)攻擊(截獲)通信量分析通信量分析消息內(nèi)容泄露圖2.1被動(dòng)攻擊消息內(nèi)容泄露很容易理解。當(dāng)發(fā)送保密電子郵件消息時(shí),我們只希望對方才能訪問,否則消息內(nèi)容會(huì)被別人看到。利用某種安全機(jī)制,可以防止消息內(nèi)容泄露。但是,如果傳遞許多這類消息,則攻擊者可以猜出某種模式的相似性,從而猜出消息內(nèi)容。主動(dòng)攻擊與被動(dòng)攻擊不同的是,主動(dòng)攻擊以某種方式修改消息內(nèi)容或生成假消息。這些攻擊很難防止。但是,這時(shí)可以發(fā)現(xiàn)和恢復(fù)的。這些攻擊包括中斷、修改和偽造。在主動(dòng)攻擊中,會(huì)以某種方式修改消息內(nèi)容。中斷攻擊又稱為偽裝攻擊。修改攻擊又可以分為重放攻擊和改變消息。偽造會(huì)產(chǎn)生拒絕服務(wù)。圖2.2顯示了這個(gè)分類。主動(dòng)攻擊偽造(拒絕服務(wù))修改偽造(拒絕服務(wù))修改中斷(偽裝)重放攻擊重放攻擊改變消息攻擊圖2.2主動(dòng)攻擊2.3口令安全性分析口令攻擊是一個(gè)一般性的術(shù)語,它描述各種行為,包括任何解密、破譯以及刪除口令的行為,或者任何繞道口令安全機(jī)制的其他方法。在計(jì)算機(jī)的安全行方面,口令攻擊時(shí)比較原始的。事實(shí)上,口令解密是任何電腦網(wǎng)絡(luò)攻擊者新手和解密者首先要學(xué)習(xí)的內(nèi)容,這主要是因?yàn)榭诹罱饷苤恍枰苌俚募夹g(shù)和經(jīng)驗(yàn)。在大多數(shù)情況下,一個(gè)脆弱的口令安全機(jī)制會(huì)危及整個(gè)系統(tǒng)的安全。攻擊在開始時(shí)只獲得有限次的訪問權(quán),通過攻擊不弱的口令安全機(jī)制,所獲得的訪問權(quán)迅速擴(kuò)大。通常情況下,僅僅通過口令的攻擊,攻擊者就可以獲得登錄的訪問權(quán),并且奪得對多個(gè)主機(jī)的控制權(quán)。網(wǎng)絡(luò)攻擊者為了獲得目標(biāo)系統(tǒng)的口令文件,試圖以離線的方式破解口令。他們首先猜一個(gè)口令,然后,用于源文件系統(tǒng)中一樣的加密算法來加密此口令,將加密的結(jié)果與文件中的加密口令比較,若相同則猜對了。因?yàn)楹苌儆杏脩羰褂秒S即組合的數(shù)字和字母來做口令,許多用戶使用的口令都可在一個(gè)特殊的黑字典中找到。在這種口令攻擊中,入侵者并不窮舉所有的字母數(shù)字的排列組合來猜測口令,而僅僅用網(wǎng)絡(luò)攻擊者字典中的單詞來嘗試。網(wǎng)絡(luò)攻擊者們已經(jīng)構(gòu)造了這樣的字典,不僅包括了英語或其他語言中的常見單詞,還包括了網(wǎng)絡(luò)攻擊者詞語、拼寫有誤的單詞和一些人名。已有的網(wǎng)絡(luò)攻擊字典包括了大約200000多個(gè)單詞,用來猜測口令非常成功,而對現(xiàn)代的計(jì)算機(jī)來說,嘗試所有200000多個(gè)單詞是很輕松的事。網(wǎng)絡(luò)攻擊者只要獲得一個(gè)用戶的口令,尤其是特權(quán)用戶的口令,就可以為所欲為了。防范的方法很簡單,只要是自己的口令不在英語字典中,且不可能被別人猜測出就可以了。2.4口令攻擊手段口令安全是保衛(wèi)自己系統(tǒng)安全的第一道防線。人們總是試圖通過猜測合法用戶的口令來獲得沒有授權(quán)的訪問。兩個(gè)通行的做法,一是從存放了許多常用口令的數(shù)據(jù)庫中選取一些“口令”來嘗試,另一個(gè)做法是設(shè)法偷走口令文件,然后通過口令翻譯工具來破譯這些加密的口令。通常情況下,網(wǎng)絡(luò)攻擊者都喜歡等到一個(gè)系統(tǒng)的口令文件。在許多UNIX系統(tǒng)中,要得到口令文件并不是那么容易,因?yàn)榭诹钗募挥谐売脩艨梢宰x寫。因此,口令文件如果能夠被盜走,在絕大多數(shù)情況下,說明系統(tǒng)的超級用戶的權(quán)限,在某種特定情況下,可以被攻擊者直接或者地行使。攻擊者之所以想到的系統(tǒng)存放口令的文件,是因?yàn)樗麄兛梢詮目诹钗募校谱g出一些口令來,以便以后能夠以合法的用戶訪問這臺(tái)機(jī)器。因此,當(dāng)超級用戶發(fā)現(xiàn)系統(tǒng)中的口令文件被非法訪問過時(shí),一定要更換所有的用戶的口令。當(dāng)一個(gè)攻擊者得到了初始的訪問權(quán)時(shí),就會(huì)到處查看,尋找系統(tǒng)中的其他安全漏洞,希望得到進(jìn)一步的特權(quán)。因此,使系統(tǒng)安全的第一步便是是那些未被授權(quán)的用戶不能進(jìn)入系統(tǒng)。這就要教育用戶懂得什么事口令安全并遵守安全規(guī)定。防止入侵者讀取口令文件,可以減少他們登錄進(jìn)入系統(tǒng)的可能性。這需要人們知道的是,取得口令文件并不一定要登錄進(jìn)系統(tǒng),而沒有登錄進(jìn)系統(tǒng)照樣可以進(jìn)行許多攻擊活動(dòng)??诹罟舻闹饕幸韵聨追N手段。1、社會(huì)工程學(xué)(SocialEngineering),通過人際交往這一非技術(shù)手段以欺騙、套取的方式來獲得口令。避免此類攻擊的對策是加強(qiáng)用戶意識(shí)。2、猜測攻擊。首先使用口令猜測程序進(jìn)行攻擊。口令猜測程序往往根據(jù)用戶定義口令的習(xí)慣猜測用戶口令,像名字縮寫、生日、寵物名、部門名等。在詳細(xì)了解用戶的社會(huì)背景之后,黑客可以列舉出幾百種可能的口令,并在很短的時(shí)間內(nèi)就可以完成猜測攻擊。3、字典攻擊。如果猜測攻擊不成功,入侵者會(huì)繼續(xù)擴(kuò)大攻擊范圍,對所有英文單詞進(jìn)行嘗試,程序?qū)葱蛉〕鲆粋€(gè)又一個(gè)的單詞,進(jìn)行一次又一次嘗試,直到成功。據(jù)有的傳媒報(bào)導(dǎo),對于一個(gè)有8萬個(gè)英文單詞的集合來說,入侵者不到一分半鐘就可試完。所以,如果用戶的口令不太長或是單詞、短語,那么很快就會(huì)被破譯出來。4、窮舉攻擊。如果字典攻擊仍然不能夠成功,入侵者會(huì)采取窮舉攻擊。一般從長度為1的口令開始,按長度遞增進(jìn)行嘗試攻擊。由于人們往往偏愛簡單易記的口令,窮舉攻擊的成功率很高。如果每千分之一秒檢查一個(gè)口令,那么86%的口令可以在一周內(nèi)破譯出來。5、混合攻擊,結(jié)合了字典攻擊和窮舉攻擊,先字典攻擊,再暴力攻擊。第三章加密技術(shù)3.1幾種常見的加密技術(shù)加密技術(shù)包括兩個(gè)元素:算法和密鑰。算法是將普通的文本(或者可以理解的信息)與一串?dāng)?shù)字(密鑰)的結(jié)合,產(chǎn)生不可理解的密文的步驟,密鑰是用來對數(shù)據(jù)進(jìn)行編碼和解碼的一種算法。在安全保密中,可通過適當(dāng)?shù)拿荑€加密技術(shù)和管理機(jī)制來保證網(wǎng)絡(luò)的信息通訊安全。密鑰加密技術(shù)的密碼體制分為對稱密鑰體制和非對稱密鑰體制兩種。相應(yīng)地,對數(shù)據(jù)加密的技術(shù)分為兩類,即對稱加密(私人密鑰加密)和非對稱加密(公開密鑰加密)。對稱加密以數(shù)據(jù)加密標(biāo)準(zhǔn)算法為典型代表,非對稱加密通常以RSA(RivestShamirAd1eman)算法為代表。對稱加密的加密密鑰和解密密鑰相同,而非對稱加密的加密密鑰和解密密鑰不同,加密密鑰可以公開而解密密鑰需要保密。1.計(jì)算機(jī)對稱密鑰加密算法對稱加密(也叫私鑰加密)指加密和解密使用相同密鑰的加密算法。有時(shí)又稱為傳統(tǒng)密碼算法,就是加密密鑰能夠從解密密鑰中推算出來,同時(shí)解密密鑰也可以從加密密鑰中推算出來。而在大多數(shù)的對稱算法中,加密密鑰和解密密鑰是相同的,所以也稱這種加密算法為秘密密鑰算法或單密鑰算法。它要求發(fā)送方和接收方在安全通信之前,商定一個(gè)密鑰。對稱算法的安全性依賴于密鑰,泄漏密鑰就意味著任何人都可以對他們發(fā)送或接收的消息解密,所以密鑰的保密性對通信性至關(guān)重要。幾種常見的對稱密鑰加密算法:DES、IDEA、RC5、Blowfish等。以上幾種算法的具體工作原理本文就不作詳細(xì)解析了。2.計(jì)算機(jī)非對稱密鑰加密算法與對稱加密算法不同,非對稱加密算法需要兩個(gè)密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數(shù)據(jù)進(jìn)行加密,只有用對應(yīng)的私有密鑰才能解密;如果用私有密鑰對數(shù)據(jù)進(jìn)行加密,那么只有用對應(yīng)的公開密鑰才能解密。因?yàn)榧用芎徒饷苁褂玫氖莾蓚€(gè)不同的密鑰,所以這種算法叫作非對稱加密算法。非對稱密鑰加密的工作原理如下:A將這A要給B發(fā)消息時(shí),A用B的公鑰加密信息,因?yàn)锳知道B的公鑰。A將這個(gè)信息發(fā)給B(已經(jīng)用B的公鑰加密信息)B用自己的私鑰解密A的信息。注意,只有B知道自己的私鑰。另外,這個(gè)消息只能用B的私鑰解密,而不能用別的密鑰解密。因此,別人都無法看懂這個(gè)信息,即使他能夠截獲這個(gè)信息。這是因?yàn)槿肭终卟恢溃碌乃借€,而這個(gè)信息只能用B的私鑰解密。幾種常見的非對稱密鑰加密算法:RSA、Elgamal、背包算法、Rabin、D-H、ECC。下面來具體介紹RSA算法。RSA算法基于這樣的數(shù)學(xué)事實(shí):兩個(gè)大素?cái)?shù)很容易相乘,而得到的積因子則很難。RSA中的私鑰和公鑰基于大素?cái)?shù)(100位以上),算法本身很簡單,但實(shí)際難度在于RSA選擇和生成私鑰和公鑰。下面看看如何生成私鑰和公鑰,如何用其進(jìn)行加密和解密。整個(gè)過程如圖3.1所示。選擇兩個(gè)選擇兩個(gè)大素?cái)?shù)P、Q計(jì)算N=P×Q選擇一個(gè)公鑰(即加密密鑰)E,使其不是(P-1)與(Q-1)的因子選擇私鑰(即解密密鑰)D,滿足下列條件:(D×E)mod(P-1)×(Q-1)=1加密時(shí),從明文PT計(jì)算密文CT如下:CT=PT∧EmodN將密文CT發(fā)送給接收方。解密時(shí),從密文CT計(jì)算明文PT如下PT=CT∧DmodN圖3.1RSA算法3.2消息摘要消息摘要也成為散列,是指消息的指印或匯總,類似于縱向冗余校驗(yàn)和循環(huán)冗余校驗(yàn)。用于驗(yàn)證數(shù)據(jù)完整性(即保證信息在發(fā)送之后和接受之前沒有被篡改)。下面舉一個(gè)LRC示例。圖3.2顯示了發(fā)送方的LRC計(jì)算,縱向冗余校驗(yàn)將位塊組成列表(行)。例如,如果要發(fā)送32位,則把其排成四行,然后計(jì)算每個(gè)列(共8列)有多少個(gè)1位(如果1位為奇數(shù),則顯示奇性,在陰影LRC行中用一個(gè)1位表示;相反,如果1位為偶數(shù),則成為偶性,在陰影LRC行中用一個(gè)0位表示)。例如,第一列有兩個(gè)1,表示偶性,因此第一列的陰影中LRC行為0;同樣,最后一列有三個(gè)1,表示奇性,因此陰影LRC行為1.這樣每列計(jì)算奇偶位,生成一個(gè)新行,共八個(gè)奇偶行,成為整個(gè)塊的奇偶位。這樣,LRC實(shí)際上市原消息的指印。原始數(shù)據(jù)原始數(shù)據(jù)排列成行LRC原始數(shù)據(jù)和LRC111001001101110100111001001010011110010011011101001110010010100111100100111001001101110100111000100101001001010010010100111100100110111010011100100101001001010011110010011011101001110010010100100101001圖3.2縱向冗余校驗(yàn)3.3MD5簡介MD5消息摘要算法是RonRivest開發(fā)的。MD5實(shí)際上根源于一系列消息摘要算法,都是由RonRivest開發(fā)的。原先的消息摘要算法成為MD,很快進(jìn)入下一版MD2,是RonRivest的,但很脆弱。因此,RonRivest開始開發(fā)MD3,結(jié)果失敗了。后來,RonRivest開發(fā)了MD4,但很快發(fā)現(xiàn)其還是不理想,因此最終推出了MD5.MD5速度很快,產(chǎn)生128位消息摘要。多年來,研究人員發(fā)現(xiàn)了MD5的弱點(diǎn),但是MD5成功克服了沖突,不過今后情況還很難說。經(jīng)過初試處理后,輸入文本變成512位塊(進(jìn)一步分為16個(gè)32位塊)。這個(gè)算法的輸入是四個(gè)32位塊構(gòu)成的集合,形成128位消息摘要。由于MD5算法的可靠性,被廣泛用于雜湊資料正確性驗(yàn)證。經(jīng)過許多程序員的努力,MD5算法已經(jīng)被各種語言實(shí)現(xiàn),.asp,.php,.java,c,c#,vb,vc++,delphi等語言。MD5算法以16個(gè)32位子分組即512位分組來提供數(shù)據(jù)雜湊,經(jīng)過程序流程,生成四個(gè)32位數(shù)據(jù),最后聯(lián)合起來成為一個(gè)128位散列?;痉绞綖椋笥?、取余、調(diào)整長度、與鏈接變量進(jìn)行循環(huán)運(yùn)算。得出結(jié)果。MD5由MD4、MD3、MD2改進(jìn)而來,主要是增加了算法難度和不可逆性。用戶的口令在WEB在進(jìn)行傳輸?shù)臅r(shí)候,可以利用MD5算法對口令進(jìn)行加密,這樣就可以避免了口令明文在WEB傳輸,從而保證用戶口令的安全性。下面來介紹MD5算法及其工作原理。第四章MD5工作原理第一步:填充MD5的第一步是在原消息中增加填充位,目的是使原消息長度等于一個(gè)值,即比512的倍數(shù)少64位。例如,如果原消息長度為1000位,則要填充472位,使消息長度為1472位,因?yàn)?4+1427=1536,是512的倍數(shù)。第二步:添加長度增加填充為位后,下一步要計(jì)算消息原長,將其加進(jìn)填充后的消息末尾。第三步:將輸入分成512位的塊計(jì)算原始消息的長度(除去填充部分),并附加到消息與填充位的后面。該長度用64位表示。如果該消息的長度超過64位,那么就只使用后64位。添加完成后,它就是最終的消息了。第四步:初始化鏈接變量第四步要初始化四個(gè)鏈接變量,分別稱為A,B,C,D,都是32位的數(shù)字。這些鏈接變量的初始十六進(jìn)制值如下表4-1所示。表4-1鏈接變量A十六進(jìn)制01234567B十六進(jìn)制89ABCDEFC十六進(jìn)制FEDCBA98D十六進(jìn)制76543210第五步:處理塊初始化之后,就要開始實(shí)際算法了。5.1步:將四個(gè)鏈接變量復(fù)制到四個(gè)變量a,b,c,d中,使a=A,b=B,c=C,d=D,如圖4.2所示。AABCDabcd圖4.2將四個(gè)鏈接變量復(fù)制到四個(gè)變量中去5.2步:將當(dāng)前512位塊分解成16個(gè)子塊,每個(gè)子塊32位,如圖4.3所示。。。?!?2位32位。。。32位塊1(512位)子塊1子塊2子塊16圖4.3將當(dāng)前512位分解為16個(gè)子塊5.3步:這時(shí)有四輪,每一輪處理一個(gè)塊中的16個(gè)子塊。每一輪的鍵入如下:(a)16個(gè)子塊;(b)變量a、b、c、d;(c)常量t,如圖4.4所示。16個(gè)子塊16個(gè)子塊16個(gè)子塊一輪abcd圖4.4每一輪處理每一輪有16個(gè)輸入子塊M[0],M[1],...,M[15],或表示位M[i],其中i為1~25。我們知道,每個(gè)子塊位32位t是一個(gè)常量數(shù)組,包含64個(gè)元素,每個(gè)元素為32位。我們把數(shù)組t的元素表示為t[1],t[2],…,t[64],或t[k],其中k為1~64。由于有四輪,因此每一輪用64位個(gè)t只中的16個(gè)。第五章MD5算法對MD5算法簡要的敘述可以為:MD5以512位分組來處理輸入的信息,且每一分組又被劃分為16個(gè)32位子分組,經(jīng)過了一系列的處理后,算法的輸出由四個(gè)32位分組組成,將這四個(gè)32位分組級聯(lián)后將生成一個(gè)128位散列值。在MD5算法中,首先需要對信息進(jìn)行填充,使其字節(jié)長度對512求余的結(jié)果等于448。因此,信息的字節(jié)長度(BitsLength)將被擴(kuò)展至N*512+448,即N*64+56個(gè)字節(jié)(Bytes),N為一個(gè)正整數(shù)。填充的方法如下,在信息的后面填充一個(gè)1和無數(shù)個(gè)0,直到滿足上面的條件時(shí)才停止用0對信息的填充。然后,在在這個(gè)結(jié)果后面附加一個(gè)以64位二進(jìn)制表示的填充前信息長度。經(jīng)過這兩步的處理,現(xiàn)在的信息字節(jié)長度=N*512+448+64=(N+1)*512,即長度恰好是512的整數(shù)倍。這樣做的原因是為滿足后面處理中對信息長度的要求。MD5中有四個(gè)32位被稱作鏈接變量(ChainingVariable)的整數(shù)參數(shù),他們分別為:A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210。當(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到d。主循環(huán)有四輪(MD4只有三輪),每輪循環(huán)都很相似。第一輪進(jìn)行16次操作。每次操作對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)=(X&Y)|((~X)&Z)G(X,Y,Z)=(X&Z)|(Y&(~Z))H(X,Y,Z)=X^Y^ZI(X,Y,Z)=Y^(X|(~Z))(&是與,|是或,~是非,^是異或)這四個(gè)函數(shù)的說明:如果X、Y和Z的對應(yīng)位是獨(dú)立和均勻的,那么結(jié)果的每一位也應(yīng)是獨(dú)立和均勻的。F是一個(gè)逐位運(yùn)算的函數(shù)。即,如果X,那么Y,否則Z。函數(shù)H是逐位奇偶操作符。假設(shè)Mj表示消息的第j個(gè)子分組(從0到15),<<FF(a,b,c,d,Mj,s,ti)表示a=b+((a+(F(b,c,d)+Mj+ti)<<GG(a,b,c,d,Mj,s,ti)表示a=b+((a+(G(b,c,d)+Mj+ti)<<HH(a,b,c,d,Mj,s,ti)表示a=b+((a+(H(b,c,d)+Mj+ti)<<II(a,b,c,d,Mj,s,ti)表示a=b+((a+(I(b,c,d)+Mj+ti)<<這四輪(64步)是:第一輪FF(a,b,c,d,M0,7,0xd76aa478)FF(d,a,b,c,M1,12,0xe8c7b756)FF(c,d,a,b,M2,17,0x242070db)FF(b,c,d,a,M3,22,0xc1bdceee)FF(a,b,c,d,M4,7,0xf57c0faf)FF(d,a,b,c,M5,12,0x4787c62a)FF(c,d,a,b,M6,17,0xa8304613)FF(b,c,d,a,M7,22,0xfd469501)

FF(a,b,c,d,M8,7,0x698098d8)FF(d,a,b,c,M9,12,0x8b44f7af)FF(c,d,a,b,M10,17,0xffff5bb1)FF(b,c,d,a,M11,22,0x895cd7be)FF(a,b,c,d,M12,7,0x6b901122)FF(d,a,b,c,M13,12,0xfd987193)FF(c,d,a,b,M14,17,0xa679438e)FF(b,c,d,a,M15,22,0x49b40821)第二輪GG(a,b,c,d,M1,5,0xf61e2562)GG(d,a,b,c,M6,9,0xc040b340)GG(c,d,a,b,M11,14,0x265e5a51)GG(b,c,d,a,M0,20,0xe9b6c7aa)GG(a,b,c,d,M5,5,0xd62f105d)GG(d,a,b,c,M10,9,0x02441453)GG(c,d,a,b,M15,14,0xd8a1e681)GG(b,c,d,a,M4,20,0xe7d3fbc8)GG(a,b,c,d,M9,5,0x21e1cde6)GG(d,a,b,c,M14,9,0xc33707d6)GG(c,d,a,b,M3,14,0xf4d50d87)GG(b,c,d,a,M8,20,0x455a14ed)GG(a,b,c,d,M13,5,0xa9e3e905)GG(d,a,b,c,M2,9,0xfcefa3f8)GG(c,d,a,b,M7,14,0x676f02d9)GG(b,c,d,a,M12,20,0x8d2a4c第三輪HH(a,b,c,d,M5,4,0xfffa3942)HH(d,a,b,c,M8,11,0x8771f681)HH(c,d,a,b,M11,16,0x6d9d6122)HH(b,c,d,a,M14,23,0xfde5380c)HH(a,b,c,d,M1,4,0xa4beea44)HH(d,a,b,c,M4,11,0x4bdecfa9)HH(c,d,a,b,M7,16,0xf6bb4b60)HH(b,c,d,a,M10,23,0xbebfbc70)HH(a,b,c,d,M13,4,0x289b7ec6)HH(d,a,b,c,M0,11,0xeaa127fa)HH(c,d,a,b,M3,16,0xd4ef3085)HH(b,c,d,a,M6,23,0x04881d05)HH(a,b,c,d,M9,4,0xd9d4d039)HH(d,a,b,c,M12,11,0xe6db99e5)HH(c,d,a,b,M15,16,0x1fa27cf8)HH(b,c,d,a,M2,23,0xc4ac5665)第四輪II(a,b,c,d,M0,6,0xf4292244)II(d,a,b,c,M7,10,0x432aff97)II(c,d,a,b,M14,15,0xab9423a7)II(b,c,d,a,M5,21,0xfc93a039)II(a,b,c,d,M12,6,0x655b59c3)II(d,a,b,c,M3,10,0x8f0ccc92)II(c,d,a,b,M10,15,0xffeff47d)II(b,c,d,a,M1,21,0x85845dd1)II(a,b,c,d,M8,6,0x6fa87e4f)II(d,a,b,c,M15,10,0xfe2ce6e0)II(c,d,a,b,M6,15,0xa3014314)II(b,c,d,a,M13,21,0x4e0811a1)II(a,b,c,d,M4,6,0xf7537e82)II(d,a,b,c,M11,10,0xbd3af235)II(c,d,a,b,M2,15,0x2ad7d2bb)II(b,c,d,a,M9,21,0xeb86d391)常數(shù)ti可以如下選擇:在第i步中,ti是4294967296*abs(sin(i))的整數(shù)部分,i的單位是弧度。(4294967296等于2的32次方)所有這些完成之后,將A、B、C、D分別加上a、b、c、d。然后用下一分組數(shù)據(jù)繼續(xù)運(yùn)行算法,最后的輸出是A、B、C和D的級聯(lián)。結(jié)束語Internet的迅速增長帶來了無窮的計(jì)算機(jī)會(huì),但是同時(shí)也帶來了全新的問題和擔(dān)心,特別是信息交換的安全性。利用WEB密碼安全傳輸只是網(wǎng)絡(luò)安全的措施之一。如今,新的信息威脅與攻擊不斷出現(xiàn)。在技術(shù)人員找到針對這些攻擊的保護(hù)方法的同時(shí),而攻擊者則在不斷尋找新的攻擊辦法。這種情況必將繼續(xù)下去。因此,網(wǎng)絡(luò)安全的道路任重而道遠(yuǎn)。致謝本文是在董尼老師的悉心指導(dǎo)下完成的。從畢業(yè)設(shè)計(jì)題目的選擇、到選到課題的研究和論證,再到本畢業(yè)設(shè)計(jì)的編寫、修改,每一步都有董尼老師的細(xì)心指導(dǎo)和認(rèn)真的解析。在董老師的指導(dǎo)下,我在各方面都有所提高,老師以嚴(yán)謹(jǐn)求實(shí),一絲不茍的治學(xué)態(tài)度和勤勉的工作態(tài)度深深感染了我,給我巨大的啟迪,鼓舞和鞭策,并成為我人生路上值得學(xué)習(xí)的榜樣。使我的知識(shí)層次又有所提高。同時(shí)感謝所有教育過我的專業(yè)老師,你們傳授的專業(yè)知識(shí)是我不斷成長的源泉也是完成本論文的基礎(chǔ)。也感謝我同一組的組員和班里的同學(xué)是你們在我遇到難題是幫我找到大量資料,解決難題。再次真誠感謝所有幫助過我的老師同學(xué)。通過這次畢業(yè)設(shè)計(jì)不僅提高了我獨(dú)立思考問題解決問題的能力而且培養(yǎng)了認(rèn)真嚴(yán)謹(jǐn),一絲不茍的學(xué)習(xí)態(tài)度。由于經(jīng)驗(yàn)匱乏,能力有限,設(shè)計(jì)中難免有許多考慮不周全的地方,希望各位老師多加指教。參考文獻(xiàn)[1]邱仲潘等.密碼學(xué)與網(wǎng)絡(luò)安全.清華大學(xué)出版社[2]李澤林,蘇淑靖.安全技術(shù).國防工業(yè)出版社[3]胡建偉,馬建峰.網(wǎng)絡(luò)安全與保密.西安電子科技大學(xué)出版社[4]謝希仁.計(jì)算機(jī)網(wǎng)絡(luò)(第五版).電子工業(yè)出版社[5]許曉東,荊繼武,阮耀平.一種混合密碼體制的認(rèn)證協(xié)議及分析.計(jì)算機(jī)工程[6]馮登國,斐定.密碼學(xué)引導(dǎo).北京:科學(xué)出版社[7]劉成勇,劉明剛,王明舉.Internet防火墻與網(wǎng)絡(luò)安全.北京:機(jī)械工業(yè)出版社附錄源代碼利用JavaScript和ASP來實(shí)現(xiàn)WEB上的用戶口令的加密傳輸,首先JavaScript腳本編寫MD5函數(shù),實(shí)現(xiàn)MD5加密算法。在服務(wù)器端利用ASP的腳本產(chǎn)生一隨機(jī)數(shù)供客戶端使用。代碼:/**md5.jvs1.0b27/06/96**JavascriptimplementationoftheRSADataSecurity,Inc.MD5*Message-DigestAlgorithm.**Copyright(c)1996HenriTorgemane.AllRightsReserved.**Permissiontouse,copy,modify,anddistributethissoftware*anditsdocumentationforanypurposesandwithout*feeisherebygrantedprovidedthatthiscopyrightnotice*appearsinallcopies.**Ofcourse,thissoftisprovided"asis"withoutexpressorimplied*warrantyofanykind.**$Id:md5.js,v2000/04/1716:40:07kkExp$**/functionarray(n){for(i=0;i<n;i++)this<i>=0;this.length=n;}/*Somebasiclogicalfunctionshadtoberewrittenbecauseofabugin*Javascript..Justtrytocompute0xffffffff>>4withit..*Ofcourse,thesefunctionsareslowerthantheoriginalwouldbe,but*atleast,theywork!*/functioninteger(n){returnn%(0xffffffff+1);}functionshr(a,b){a=integer(a);b=integer(b);if(a-0x80000000>=0){a=a%0x80000000;a>>=b;a+=0x40000000>>(b-1);}elsea>>=b;returna;}functionshl1(a){a=a%0x80000000;if(a&0x40000000==0x40000000){a-=0x40000000;a*=2;a+=0x80000000;}elsea*=2;returna;}

functionshl(a,b){a=integer(a);b=integer(b);for(vari=0;i<b;i++)a=shl1(a);returna;}functionand(a,b){a=integer(a);b=integer(b);vart1=(a-0x80000000);vart2=(b-0x80000000);if(t1>=0)if(t2>=0)eturn((t1&t2)+0x80000000);elsereturn(t1&b);elseif(t2>=0)return(a&t2);elsereturn(a&b);}functionor(a,b){a=integer(a);b=integer(b);vart1=(a-0x80000000);vart2=(b-0x80000000);if(t1>=0)if(t2>=0)return((t1|t2)+0x80000000);elsereturn((t1|b)+0x80000000);elseif(t2>=0)return((a|t2)+0x80000000);elsereturn(a|b);}functionxor(a,b){a=integer(a);b=integer(b);vart1=(a-0x80000000);vart2=(b-0x80000000);if(t1>=0)if(t2>=0)return(t1^t2);elsereturn((t1^b)+0x80000000);elseif(t2>=0)return((a^t2)+0x80000000);elsereturn(a^b);}functionnot(a){a=integer(a);return(0xffffffff-a);}/*Herebegintherealalgorithm*/varstate=newarray(4);varcount=newarray(2);count[0]=0;count[1]=0;varbuffer=newarray(64);vartransformBuffer=newarray(16);vardigestBits=newarray(16);varS11=7;varS12=12;varS13=17;varS14=22;varS21=5;varS22=9;varS23=14;varS24=20;varS31=4;varS32=11;varS33=16;varS34=23;varS41=6;varS42=10;varS43=15;varS44=21;functionF(x,y,z){returnor(and(x,y),and(not(x),z));}functionG(x,y,z){returnor(and(x,z),and(y,not(z)));}functionH(x,y,z){returnxor(xor(x,y),z);}functionI(x,y,z){returnxor(y,or(x,not(z)));}functionrotateLeft(a,n){returnor(shl(a,n),(shr(a,(32-n))));}functionFF(a,b,c,d,x,s,ac){a=a+F(b,c,d)+x+ac;a=rotateLeft(a,s);a=a+b;returna;}unctionGG(a,b,c,d,x,s,ac){a=a+G(b,c,d)+x+ac;a=rotateLeft(a,s);a=a+b;returna;}functionHH(a,b,c,d,x,s,ac){a=a+H(b,c,d)+x+ac;a=rotateLeft(a,s);a=a+b;returna;}functionII(a,b,c,d,x,s,ac){a=a+I(b,c,d)+x+ac;a=rotateLeft(a,s);a=a+b;returna;}functiontransform(buf,offset){vara=0,b=0,c=0,d=0;arx=transformBuffer;a=state[0];b=state[1];c=state[2];d=state[3];for(i=0;i<16;i++){x<i>=and(buf[i*4+offset],0xff);for(j=1;j<4;j++){x<i>+=shl(and(buf[i*4+j+offset],0xff),j*8);}}/*Round1*/a=FF(a,b,c,d,x[0],S11,0xd76aa478);/*1*/d=FF(d,a,b,c,x[1],S12,0xe8c7b756);/*2*/c=FF(c,d,a,b,x[2],S13,0x242070db);/*3*/b=FF(b,c,d,a,x[3],S14,0xc1bdceee);/*4*/a=FF(a,b,c,d,x[4],S11,0xf57c0faf);/*5*/d=FF(d,a,b,c,x[5],S12,0x4787c62a);/*6*/c=FF(c,d,a,b,x[6],S13,0xa8304613);/*7*/b=FF(b,c,d,a,x[7],S14,0xfd469501);/*8*/a=FF(a,b,c,d,x[8],S11,0x698098d8);/*9*/d=FF(d,a,b,c,x[9],S12,0x8b44f7af);/*10*/c=FF(c,d,a,b,x[10],S13,0xffff5bb1);/*11*/b=FF(b,c,d,a,x[11],S14,0x895cd7be);/*12*/a=FF(a,b,c,d,x[12],S11,0x6b901122);/*13*/d=FF(d,a,b,c,x[13],S12,0xfd987193);/*14*/c=FF(c,d,a,b,x[14],S13,0xa679438e);/*15*/b=FF(b,c,d,a,x[15],S14,0x49b40821);/*16*//*Round2*/a=GG(a,b,c,d,x[1],S21,0xf61e2562);/*17*/d=GG(d,a,b,c,x[6],S22,0xc040b340);/*18*/c=GG(c,d,a,b,x[11],S23,0x265e5a51);/*19*/b=GG(b,c,d,a,x[0],S24,0xe9b6c7aa);/*20*/a=GG(a,b,c,d,x[5],S21,0xd62f105d);/*21*/d=GG(d,a,b,c,x[10],S22,0x2441453);/*22*/c=GG(c,d,a,b,x[15],S23,0xd8a1e681);/*23*/b=GG(b,c,d,a,x[4],S24,0xe7d3fbc8);/*24*/a=GG(a,b,c,d,x[9],S21,0x21e1cde6);/*25*/d=GG(d,a,b,c,x[14],S22,0xc33707d6);/*26*/c=GG(c,d,a,b,x[3],S23,0xf4d50d87);/*27*/b=GG(b,c,d,a,x[8],S24,0x455a14ed);/*28*/a=GG(a,b,c,d,x[13],S21,0xa9e3e905);/*29*/d=GG(d,a,b,c,x[2],S22,0xfcefa3f8);/*30*/c=GG(c,d,a,b,x[7],S23,0x676f02d9);/*31*/b=GG(b,c,d,a,x[12],S24,0x8d2a4c/*Round3*/

a=HH(a,b,c,d,x[5],S31,0xfffa3942);/*33*/d=HH(d,a,b,c,x[8],S32,0x8771f681);/*34*/c=HH(c,d,a,b,x[11],S33,0x6d9d6122);/*35*/b=HH(b,c,d,a,x[14],S34,0xfde5380c);/*36*/a=HH(a,b,c,d,x[1],S31,0xa4beea44);/*37*/d=HH(d,a,b,c,x[4],S32,0x4bdecfa9);/*38*/c=HH(c,d,a,b,x[7],S33,0xf6bb4b60);/*39*/b=HH(b,c,d,a,x[10],S34,0xbebfbc70);/*40*/a=HH(a,b,c,d,x[13],S31,0x289b7ec6);/*41*/d=HH(d,a,b,c,x[0],S32,0xeaa127fa);/*42*/c=HH(c,d,a,b,x[3],S33,0xd4ef3085);/*43*/b=HH(b,c,d,a,x[6],S34,0x4881d05);/*44*/a=HH(a,b,c,d,x[9],S31,0xd9d4d039);/*45*/d=HH(d,a,b,c,x[12],S32,0xe6db99e5);/*46*/c=HH(c,d,a,b,x[15],S33,0x1fa27cf8);/*47*/b=HH(b,c,d,a,x[2],S34,0xc4ac5665);/*48*//*Round4*/a=II(a,b,c,d,x[0],S41,0xf4292244);/*49*/d=II(d,a,b,c,x[7],S42,0x432aff97);/*50*/c=II(c,d,a,b,x[14],S43,0xab9423a7);/*51*/b=II(b,c,d,a,x[5],S44,0xfc93a039);/*52*/a=II(a,b,c,d,x[12],S41,0x655b59c3);/*53*/d=II(d,a,b,c,x[3],S42,0x8f0ccc92);/*54*/c=II(c,d,a,b,x[10],S43,0xffeff47d);/*55*/b=II(b,c,d,a,x[1],S44,0x85845dd1);/*56*/a=II(a,b,c,d,x[8],S41,0x6fa87e4f);/*57*/d=II(d,a,b,c,x[15],S42,0xfe2ce6e0);/*58*/c=II(c,d,a,b,x[6],S43,0xa3014314);/*59*/b=II(b,c,d,a,x[13],S44,0x4e0811a1);/*60*/a=II(a,b,c,d,x[4],S41,0xf7537e82);/*61*/d=II(d,a,b,c,x[11],S42,0xbd3af235);/*62*/c=II(c,d,a,b,x[2],S43,0x2ad7d2bb);/*63*/b=II(b,c,d,a,x[9],S44,0xeb86d391);/*64*/state[0]+=a;state[1]+=b;state[2]+=c;state[3]+=d;}functioninit(){count[0]=count[1]=0;state[0]=0x67452301;state[1]=0xefcdab89;state[2]=0x98badcfe;state[3]=0x10325476;for(i=0;i<digestBits.length;i++)digestBits<i>=0;}functionupdate(b){varindex,i;index=and(shr(count[0],3),0x3f);if(count[0]<0xffffffff-7)count[0]+=8;else{count[1]++;count[0]-=0xffffff

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論