課程設(shè)計(jì)(論文)-安全即時(shí)通訊軟件_第1頁(yè)
課程設(shè)計(jì)(論文)-安全即時(shí)通訊軟件_第2頁(yè)
課程設(shè)計(jì)(論文)-安全即時(shí)通訊軟件_第3頁(yè)
課程設(shè)計(jì)(論文)-安全即時(shí)通訊軟件_第4頁(yè)
課程設(shè)計(jì)(論文)-安全即時(shí)通訊軟件_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

桂林電子科技大學(xué)課程設(shè)計(jì)報(bào)告用紙PAGE18PAGE1課程設(shè)計(jì)(論文)說(shuō)明書題目:安全即時(shí)通訊軟件學(xué)院:專業(yè):姓名:學(xué)號(hào):指導(dǎo)教師:2011年09月09日

摘要隨著現(xiàn)代技術(shù)的高度快速發(fā)展,網(wǎng)絡(luò)技術(shù)的也不斷發(fā)展,凡事都有兩面性,網(wǎng)絡(luò)技術(shù)的高度發(fā)展的同時(shí)同樣會(huì)帶來(lái)負(fù)面性,人們的信息得不到安全的保障,為此保護(hù)人們的隱私就變得越來(lái)越重要。如人們的個(gè)人信息經(jīng)常通過(guò)網(wǎng)絡(luò)間的傳遞、電子商務(wù)等方面都需要大力的保護(hù),為此信息保密技術(shù)也就隨之產(chǎn)生。信息的保密技術(shù)主要是由加密技術(shù)實(shí)現(xiàn),常見的加密算法有多種,有非對(duì)稱的RSA、對(duì)稱的DES、生成消息摘要的MD5等。為了保護(hù)用戶之間網(wǎng)絡(luò)通訊的安全,本系統(tǒng)實(shí)現(xiàn)用戶之間的安全聊天,聊天消息經(jīng)過(guò)經(jīng)典的DES加密算法后再傳送,這樣在網(wǎng)絡(luò)之間傳輸?shù)氖亲屓丝床欢拿芪?,采用TCP協(xié)議,確保信息的安全,安全穩(wěn)定,實(shí)用性非常高。Java語(yǔ)言具有簡(jiǎn)單、安全、可移植、面向?qū)ο?、健壯、多線程、體系結(jié)構(gòu)中立、解釋執(zhí)行、高性能、分布式和動(dòng)態(tài)等主要特點(diǎn)。起初java還有一些弊病,但是隨著現(xiàn)代技術(shù)的高速發(fā)展,硬件的限制幾乎不再存在。java本身封裝性很好,利用Java語(yǔ)言中秘密密鑰工廠對(duì)RSA、DES、MD5、算法的支持,使得本系統(tǒng)可以對(duì)消息進(jìn)行加密,生成消息摘要,進(jìn)行數(shù)字簽名保存等功能。關(guān)鍵詞:加密;解密;DES;RSA;MD5;JAVA;安全聊天

目錄引言………………41系統(tǒng)的目標(biāo)及任務(wù)……………61.1建設(shè)目標(biāo)……………………71.2系統(tǒng)的主要任務(wù)……………………71.3系統(tǒng)性能指標(biāo)……………………71.4系統(tǒng)化標(biāo)準(zhǔn)要求……………………72系統(tǒng)需求分析……………………72.1系統(tǒng)的詳細(xì)需求……………………72.2使用環(huán)境……………………112.3可行性分析……………………113軟件開發(fā)過(guò)程…………………124關(guān)鍵技術(shù) ……………115軟件測(cè)試過(guò)程……………………55.1測(cè)試環(huán)境 ……………………155.2功能測(cè)試 ………165.3性能測(cè)試 ………166使用說(shuō)明………167結(jié)論 …………17 參考文獻(xiàn) 18引言隨后網(wǎng)絡(luò)技術(shù)的發(fā)展,人們的信息安全越來(lái)越重要了,這就要對(duì)信息進(jìn)行保密,這來(lái)自各方面的壓力,黑客入侵,病毒等等都不能是我們的信息保證安全,這就要求我們對(duì)重要的信息進(jìn)行加密,讓別人就算獲取這些信息也不能明白這些信息的含義,真正做到保密性。對(duì)于對(duì)稱算法來(lái)說(shuō),無(wú)論是從實(shí)用性還是從安全性,DES算法無(wú)疑是一個(gè)好的選擇。但是對(duì)于非對(duì)稱算法來(lái)說(shuō)RSA也是一個(gè)很好的算法加密。對(duì)于獲取消息摘要的來(lái)MD5和SHA-1都是不錯(cuò)的選擇。DES(dataencryptionStandard)是一種世界標(biāo)準(zhǔn)的加密形式,已經(jīng)15年歷史了,雖然有些老,可還算是比較可靠的算法。在七十的初期,隨著計(jì)算機(jī)之間的通信發(fā)展,需要有一種標(biāo)準(zhǔn)密碼算法為了限制不同算法的激增使它們之間不能互相對(duì)話。為解決這個(gè)問(wèn)題,美國(guó)國(guó)家安全局(N.S.A)進(jìn)行招標(biāo)。I.B.M公司開發(fā)了一種算法,稱為:Lucifer。經(jīng)過(guò)幾年的研討和修改,這種算法,成為了今天的D.E.S,1976年11月23日,終于被美國(guó)國(guó)家安全局采用。D.E.S是分塊加密的,將明文分割成64BITS的塊,然后它們一個(gè)個(gè)接起來(lái)。它使用56位密鑰對(duì)64位的數(shù)據(jù)塊進(jìn)行加密,并對(duì)64bits的數(shù)據(jù)塊進(jìn)行16輪編碼。與每輪編碼時(shí),一個(gè)48bits的“每輪”密鑰值由56bits的完整密鑰得出來(lái)。DES用軟件進(jìn)行解碼需要用很長(zhǎng)時(shí)間,而用硬件解碼速度非常快,1977年,人們估計(jì)要耗資兩千萬(wàn)美元才能建成一個(gè)專門計(jì)算機(jī)用于DES的解密,而且需要12個(gè)小時(shí)的破解才能得到結(jié)果。所以,當(dāng)時(shí)DES被認(rèn)為是一種十分強(qiáng)壯的加密方法,所以對(duì)于不是很高機(jī)密行的信息,一般都可以用之進(jìn)行加密了。RSA算法是第一個(gè)能同時(shí)用于加密和數(shù)字簽名的算法,也易于理解和操作。RSA是被研究得最廣泛的公鑰算法,從提出到現(xiàn)在已近二十年,經(jīng)歷了各種攻擊的考驗(yàn),逐漸為人們接受,普遍認(rèn)為是目前最優(yōu)秀的公鑰方案之一。RSA的安全性依賴于大數(shù)的因子分解,但并沒(méi)有從理論上證明破譯RSA的難度與大數(shù)分解難度等價(jià)。即RSA的重大缺陷是無(wú)法從理論上把握它的保密性能如何,而且密碼學(xué)界多數(shù)人士?jī)A向于因子分解不是NPC問(wèn)題。RSA的缺點(diǎn)主要有:A)產(chǎn)生密鑰很麻煩,受到素?cái)?shù)產(chǎn)生技術(shù)的限制,因而難以做到一次一密。B)分組長(zhǎng)度太大,為保證安全性,n至少也要600bits以上,使運(yùn)算代價(jià)很高,尤其是速度較慢,較對(duì)稱密碼算法慢幾個(gè)數(shù)量級(jí);且隨著大數(shù)分解技術(shù)的發(fā)展,這個(gè)長(zhǎng)度還在增加,不利于數(shù)據(jù)格式的標(biāo)準(zhǔn)化。目前,SET(SecureElectronicTransaction)協(xié)議中要求CA采用2048bits長(zhǎng)的密鑰,其他實(shí)體使用1024比特的密鑰。C)RSA密鑰長(zhǎng)度隨著保密級(jí)別提高,增加很快。RSA為非對(duì)稱算法,適用于數(shù)字簽名。數(shù)字簽名(DigitalSignature)技術(shù)是非對(duì)稱加密算法的典型應(yīng)用。數(shù)字簽名的應(yīng)用過(guò)程是,數(shù)據(jù)源發(fā)送方使用自己的私鑰對(duì)數(shù)據(jù)校驗(yàn)或其他與數(shù)據(jù)內(nèi)容有關(guān)的變量進(jìn)行加密處理,完成對(duì)數(shù)據(jù)的合法“簽名”,數(shù)據(jù)接收方則利用對(duì)方的公鑰來(lái)解讀收到的“數(shù)字簽名”,并將解讀結(jié)果用于對(duì)數(shù)據(jù)完整性的檢驗(yàn),以確認(rèn)簽名的合法性。數(shù)字簽名技術(shù)是在網(wǎng)絡(luò)系統(tǒng)虛擬環(huán)境中確認(rèn)身份的重要技術(shù),完全可以代替現(xiàn)實(shí)過(guò)程中的“親筆簽字”,在技術(shù)和法律上有保證。在數(shù)字簽名應(yīng)用中,發(fā)送者的公鑰可以很方便地得到,但他的私鑰則需要嚴(yán)格保密。隨著信息技術(shù)和計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的發(fā)展,其應(yīng)用涉及到政府、軍事、文教、商業(yè)、金融等諸多領(lǐng)域。如商業(yè)經(jīng)濟(jì)信息系統(tǒng)、政府機(jī)關(guān)信息系統(tǒng)、銀行業(yè)務(wù)系統(tǒng)、證券業(yè)務(wù)系統(tǒng)、科研數(shù)據(jù)傳輸?shù)?,這些系統(tǒng)都涉及到機(jī)密信息的傳輸與存儲(chǔ)。信息時(shí)代雖然帶給我們無(wú)限的商機(jī)與方便,但也充斥著隱患與危險(xiǎn)。由于網(wǎng)絡(luò)容易受到攻擊,導(dǎo)致機(jī)密信息的泄密,輕則引發(fā)企業(yè)、部門工作陷于癱瘓而造成巨大的經(jīng)濟(jì)損失,重則危及國(guó)家、軍事安全和社會(huì)穩(wěn)定。所以網(wǎng)絡(luò)信息安全已成為保證國(guó)民經(jīng)濟(jì)信息化建設(shè)健康發(fā)展的基礎(chǔ),直接關(guān)系到國(guó)家的安全,其影響重大。如何保證機(jī)密信息不泄漏,鑒別信息來(lái)源的真實(shí)性,確保信息的完整性和不可抵賴性,就是網(wǎng)絡(luò)信息安全研究需要解決的問(wèn)題。網(wǎng)絡(luò)安全的目標(biāo)應(yīng)當(dāng)滿足:身份真實(shí)性、信息機(jī)密性、信息完整性、服務(wù)可用性、不可否認(rèn)性、系統(tǒng)可控性、系統(tǒng)易用性、可審查性等等。數(shù)字簽名技術(shù)是網(wǎng)絡(luò)安全的重要手段之一,它可以保證信息完整性、鑒別發(fā)送者的身份真實(shí)性與不可否認(rèn)性;再運(yùn)用數(shù)字簽名本身的基礎(chǔ)技術(shù)如加密技術(shù)可以保證信息機(jī)密性;如再運(yùn)用審計(jì)日志的辦法,可完成可審查性的功能。數(shù)字簽名技術(shù)是當(dāng)前網(wǎng)絡(luò)安全領(lǐng)域的研究熱點(diǎn)。數(shù)字簽名的特性及可防御的網(wǎng)絡(luò)威脅可以概括為:身份鑒別,可鑒別信源的真實(shí)性而防止冒充;數(shù)據(jù)完整性保護(hù),抵御數(shù)據(jù)的篡改或重排;不可抵賴性,信源事后不可否認(rèn)以防止其抵賴;一般還使用加密技術(shù)保護(hù)信息機(jī)密性,以防截聽攻擊;加入流水號(hào)等技術(shù),可防重放攻擊。所以,數(shù)字簽名技術(shù)滿足網(wǎng)絡(luò)安全的目標(biāo)即身份真實(shí)性、信息機(jī)密性、信息完整性、服務(wù)可用性、不可否認(rèn)性、系統(tǒng)可控性、系統(tǒng)易用性、可審查性等等。特別是其身份鑒別、數(shù)據(jù)完整性和不可抵賴性在電子商務(wù)、電子政務(wù)等應(yīng)用領(lǐng)域中有很重要的作用[1]。作為網(wǎng)絡(luò)安全的關(guān)鍵性技術(shù)之一,數(shù)字簽名在社會(huì)生活的各個(gè)領(lǐng)域也都具有十分廣闊的應(yīng)用前景。1991年,Rivest開發(fā)出技術(shù)上更為趨近成熟的md5算法。它在MD4的基礎(chǔ)上增加了"安全-帶子"(safety-belts)的概念。雖然MD5比MD4稍微慢一些,但卻更為安全。這個(gè)算法很明顯的由四個(gè)和MD4設(shè)計(jì)有少許不同的步驟組成。在MD5算法中,信息-摘要的大小和填充的必要條件與MD4完全相同。Denboer和Bosselaers曾發(fā)現(xiàn)MD5算法中的假?zèng)_突(pseudo-collisions),但除此之外就沒(méi)有其他被發(fā)現(xiàn)的加密后結(jié)果了。Vanoorschot和Wiener曾經(jīng)考慮過(guò)一個(gè)在散列中暴力搜尋沖突的函數(shù)(brute-forcehashfunction),而且他們猜測(cè)一個(gè)被設(shè)計(jì)專門用來(lái)搜索MD5沖突的機(jī)器(這臺(tái)機(jī)器在1994年的制造成本大約是一百萬(wàn)美元)可以平均每24天就找到一個(gè)沖突。但單從1991年到2001年這10年間,竟沒(méi)有出現(xiàn)替代MD5算法的MD6或被叫做其他什么名字的新算法這一點(diǎn),我們就可以看出這個(gè)瑕疵并沒(méi)有太多的影響MD5的安全性。上面所有這些都不足以成為MD5的在實(shí)際應(yīng)用中的問(wèn)題。并且,由于MD5算法的使用不需要支付任何版權(quán)費(fèi)用的,所以在一般的情況下(非絕密應(yīng)用領(lǐng)域。但即便是應(yīng)用在絕密領(lǐng)域內(nèi),MD5也不失為一種非常優(yōu)秀的中間技術(shù)),MD5怎么都應(yīng)該算得上是非常安全的了。MD5用的是哈希函數(shù),在計(jì)算機(jī)網(wǎng)絡(luò)中應(yīng)用較多的不可逆加密算法有RSA公司發(fā)明的MD5算法和由美國(guó)國(guó)家技術(shù)標(biāo)準(zhǔn)研究所建議的安全散列算法SHA。1系統(tǒng)的目標(biāo)及任務(wù)1.1建設(shè)目標(biāo)安全即時(shí)通訊軟件依據(jù)開發(fā)要求對(duì)人們?nèi)粘P畔⑦M(jìn)行保密的開發(fā)的,符合人們的要求標(biāo)準(zhǔn),采用多線程開發(fā)模式,用戶之前可以隨意發(fā)送通訊消息,省去了一人一句的局面。本系統(tǒng)可以實(shí)現(xiàn)安全消息傳遞,因?yàn)閭鬟f的消息都是進(jìn)過(guò)用DES加密生成的密文傳送的,即使攻擊者截獲了消息,沒(méi)有密鑰也不能獲取消息內(nèi)容。本系統(tǒng)還能對(duì)消息生成消息摘要,然后用使用者的油非對(duì)稱算法RSA生成的私鑰進(jìn)行消息摘要簽名,讓使用者對(duì)消息具有不可否認(rèn)性的功能,保持消息的完整性和不可篡改性。1.2系統(tǒng)的主要任務(wù)安全即時(shí)通訊軟件主要任務(wù)就是要能夠使用戶之前建立了連接之后可以任意發(fā)送聊天消息,消息的發(fā)送是沒(méi)有限制的,對(duì)信息進(jìn)行保密,能對(duì)信息進(jìn)行加密解密,應(yīng)用于聊天的信息,在網(wǎng)絡(luò)中傳輸?shù)亩际且悦芪膫鬏數(shù)?,所以安全性可以說(shuō)是很好,應(yīng)該讓使用者具有不可否認(rèn)性得功能,用使用者的私鑰來(lái)進(jìn)行消息摘要簽名。1.3系統(tǒng)性能指標(biāo)安全即時(shí)通訊軟件是采用Java語(yǔ)言來(lái)實(shí)現(xiàn)的,Java語(yǔ)言用得廣泛,具有跨平臺(tái)性。其中用的加密算法是DES、和RSA、MD5、,對(duì)于聊天消息加密,采用對(duì)稱算法DES進(jìn)行加密,對(duì)于消息保存用哈希算法MD5進(jìn)行消息摘要的生成,然后用非對(duì)稱算法RSA進(jìn)行簽名,這樣就很好的結(jié)合,這樣的結(jié)合具有安全,不可否認(rèn)性。1.4系統(tǒng)標(biāo)準(zhǔn)化要求安全即時(shí)通訊軟件是針對(duì)現(xiàn)實(shí)中的具體要求而設(shè)計(jì)的,系統(tǒng)所實(shí)現(xiàn)的功能都是又javaJDK中提供的標(biāo)準(zhǔn)算法,是符合設(shè)計(jì)要求的,具有標(biāo)準(zhǔn)性。2系統(tǒng)需求分析2.1系統(tǒng)的詳細(xì)需求2.1.1功能需求安全即時(shí)通訊軟件設(shè)計(jì)的目的就是為了人們信息的保密性,可以讓不是自己授權(quán)的人們無(wú)法獲取其信息來(lái)對(duì)信息進(jìn)行保密。軟件設(shè)計(jì)符合現(xiàn)實(shí)狀況的需求,能對(duì)信息信息加密解密和安全聊天,在網(wǎng)絡(luò)中傳輸?shù)亩际敲芪?,如果沒(méi)有解密密鑰的話,就不能真正的獲取里面的消息內(nèi)容,可以對(duì)一般的字符串和文件進(jìn)行加密解密,可以進(jìn)行一對(duì)一的安全聊天。2.1.2使用范圍安全即時(shí)通訊軟件是針對(duì)現(xiàn)實(shí)狀況而設(shè)計(jì)的,具有使用的廣泛性,使用界面有良好的提示,用戶只要根據(jù)提示一步一步使用即可,無(wú)須擔(dān)心使用不方便的問(wèn)題存在。2.1.3業(yè)務(wù)流程具體如圖:開始開始登錄界面登錄界面登錄/注冊(cè)注冊(cè) 登錄(驗(yàn)證用戶名和密碼)登錄/注冊(cè)聊天主界面聊天主界面連接遠(yuǎn)程服務(wù)器注冊(cè)用戶連接遠(yuǎn)程服務(wù)器注冊(cè)用戶保存聊天記錄保存聊天記錄返回結(jié)果返回結(jié)果產(chǎn)生RSA密鑰簽名并保存文件產(chǎn)生RSA密鑰簽名并保存文件退出到登錄界面退出到登錄界面圖2-1業(yè)務(wù)流程圖2.1.4用戶界面開始界面:用戶輸入密鑰進(jìn)行匹配,正確的就進(jìn)入聊天界面圖2-2客戶登錄界面通訊界面客戶端(安全聊天),:用戶雙發(fā)建立連接后可以進(jìn)行安全通信 圖2-3客戶—客戶端聊天界面客戶端在控制臺(tái)輸出消息密文:傳輸過(guò)程中以密文形式進(jìn)行圖2-4客戶—客戶端控制臺(tái)輸出通訊界面服務(wù)器(安全聊天)圖2-5客戶—服務(wù)器聊天界面服務(wù)器在控制臺(tái)輸出消息密文:圖2-6客戶—服務(wù)器端控制臺(tái)輸出 聊天記錄保存:用戶可以查看自己發(fā)送過(guò)的消息密文,并對(duì)消息密文存檔和簽名圖2-7消息保存界面在e:\下有message.txt文件:該文件記錄這用戶本次的整個(gè)聊天記錄圖2-8消息保存本地界面message.txt文件內(nèi)容為:圖2-9消息具體內(nèi)容2.1.5輸出要求安全即時(shí)通訊軟件輸出都是通過(guò)在界面上顯示.對(duì)用戶不合法的輸入會(huì)有向的提示能,比如客戶端如果輸入的IP和端口號(hào)不可用的時(shí)候,會(huì)提示無(wú)法與固定的IP進(jìn)行連接通話。圖2-10無(wú)法連接對(duì)方提示在保存聊天記錄的時(shí)候,如果忘記輸入路徑的話,會(huì)提示:圖2-11消息保存路徑不對(duì)提示當(dāng)保存記錄成功的時(shí)候會(huì)提示:圖2-12消息密文保存成功提示當(dāng)用戶通過(guò)發(fā)送byte要求結(jié)束通話的時(shí)候,消息發(fā)送編輯框提示和發(fā)送按鈕都不可用:圖2-13結(jié)束通話狀態(tài)提示2.1.6故障處理安全即時(shí)通訊軟件針對(duì)可以出現(xiàn)的異常都進(jìn)行捕獲,如果出項(xiàng)異常也不會(huì)對(duì)軟件有所影響,所以有很好的故障處理能力,不用擔(dān)心存在著不可預(yù)測(cè)的不可用性。2.2使用環(huán)境網(wǎng)絡(luò)環(huán)境:安全即時(shí)通訊軟件對(duì)網(wǎng)絡(luò)有一定的要求,能夠進(jìn)行網(wǎng)絡(luò)聊天。硬件環(huán)境:筆記本,電腦性能只要一般就OK了,要有JAVA虛擬機(jī)即可;軟件環(huán)境:JAVA虛擬機(jī)。其他系統(tǒng)關(guān)系:win7、XP等都可以。2.3可行性分析技術(shù)可行性:安全即時(shí)通訊軟件所用的開發(fā)語(yǔ)言是具有平臺(tái)無(wú)異性的java語(yǔ)言,具有很好的擴(kuò)展性,對(duì)操作系統(tǒng)沒(méi)有什么硬性的要求,能跑一般的程序即可。軟件中所用到的加密算法都是有安全性保證的,無(wú)需擔(dān)心其安全性問(wèn)題。經(jīng)濟(jì)可行性:安全即時(shí)通訊軟件有很好的操作性,能對(duì)公司企業(yè)的信息進(jìn)行加密保密,預(yù)防中重要的信息泄密,當(dāng)然具有很好的經(jīng)濟(jì)可行性。人員可行性:只要對(duì)電腦有稍微熟悉的,對(duì)自己工作有一定了解的人都可以進(jìn)行操作,不擔(dān)心用戶不會(huì)用的問(wèn)題存在。影響系統(tǒng)開發(fā)的因素:暫時(shí)沒(méi)有發(fā)現(xiàn)。3系統(tǒng)設(shè)計(jì)安全即時(shí)通訊軟件安全即時(shí)通訊軟件功能模塊圖:數(shù)字簽名消息摘要消息保存安全聊天注冊(cè)登錄數(shù)字簽名消息摘要消息保存安全聊天注冊(cè)登錄圖3-1功能模塊圖4關(guān)鍵技術(shù)(1)DES加解密://確定算法和初始化密鑰和加密解密工具publicDes(StringstrKey)throwsException{ Keykey=getKey(strKey.getBytes()); encryptCipher=Cipher.getInstance("DES");//獲得加密工具 encryptCipher.init(Cipher.ENCRYPT_MODE,key);//初始化加密工具 decryptCipher=Cipher.getInstance("DES");//獲得解密工具 decryptCipher.init(Cipher.DECRYPT_MODE,key);初始化解密工具}//字符串加密方法publicbyte[]encrypt(byte[]arrB)throwsException{ returnencryptCipher.doFinal(arrB);}//字符串解密方法publicbyte[]decrypt(byte[]arrB)throwsException{ returndecryptCipher.doFinal(arrB);}//將byte數(shù)組轉(zhuǎn)化為十六進(jìn)制publicStringbyteArr2HexStr(byte[]arrB)throwsException{ intiLen=arrB.length; //每個(gè)byte用兩個(gè)字符才能表示,所以字符串的長(zhǎng)度是數(shù)組長(zhǎng)度的兩倍 StringBuffersb=newStringBuffer(iLen*2); for(inti=0;i<iLen;i++){ intintTmp=arrB[i]; //把負(fù)數(shù)轉(zhuǎn)換為正數(shù) while(intTmp<0){ intTmp=intTmp+256; } //小于0F的數(shù)需要在前面補(bǔ)0 if(intTmp<16){ sb.append("0"); } sb.append(Integer.toString(intTmp,16)); } returnsb.toString();}//將十六進(jìn)制轉(zhuǎn)化為byte數(shù)組publicstaticbyte[]hexStr2ByteArr(StringstrIn)throwsException{ byte[]arrB=strIn.getBytes(); intiLen=arrB.length; //兩個(gè)字符表示一個(gè)字節(jié),所以字節(jié)數(shù)組長(zhǎng)度是字符串長(zhǎng)度除以2 byte[]arrOut=newbyte[iLen/2]; for(inti=0;i<iLen;i=i+2){ StringstrTmp=newString(arrB,i,2); arrOut[i/2]=(byte)Integer.parseInt(strTmp,16); } returnarrOut; }(2)RSA加解密 //產(chǎn)生密鑰方法publicvoidcreateKey()throwsNoSuchAlgorithmException, FileNotFoundException,IOException{ /**為RSA算法創(chuàng)建一個(gè)KeyPairGenerator對(duì)象*/ KeyPairGeneratorkeyPairGen=KeyPairGenerator.getInstance("RSA"); /**利用上面的隨機(jī)數(shù)據(jù)源初始化這個(gè)KeyPairGenerator對(duì)象*/ keyPairGen.initialize(1024); /**生成密匙對(duì)*/ KeyPairkeyPair=keyPairGen.generateKeyPair(); /**得到公鑰*/ KeypublicKey=keyPair.getPublic(); /**得到私鑰*/ KeyprivateKey=keyPair.getPrivate(); /**用對(duì)象流將生成的密鑰寫入文件*/ ObjectOutputStreamoos1=newObjectOutputStream(newFileOutputStream(PUBLIC_KEY_FILE)); ObjectOutputStreamoos2=newObjectOutputStream(newFileOutputStream(PRIVATE_KEY_FILE)); oos1.writeObject(publicKey); oos2.writeObject(privateKey); /**清空緩存,關(guān)閉文件輸出流*/ oos1.close(); oos2.close(); }//字符串加密方法publicbyte[]encrypt(byte[]b)throwsException{ ObjectInputStreaminputStream=newObjectInputStream( newFileInputStream(PRIVATE_KEY_FILE)); key=(Key)inputStream.readObject(); inputStream.close(); /**得到Cipher對(duì)象來(lái)實(shí)現(xiàn)對(duì)源數(shù)據(jù)的RSA進(jìn)行數(shù)字簽名*/ Ciphercipher=Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE,key); /**執(zhí)行加密操作*/ byte[]b1=cipher.doFinal(b); returnb1;}//字符串解密方法:publicbyte[]decrypt(byte[]buf)throwsException{ ObjectInputStreaminputStream=newObjectInputStream( newFileInputStream(PUBLIC_KEY_FILE)); key=(Key)inputStream.readObject(); inputStream.close(); /**得到Cipher對(duì)象對(duì)已用私鑰簽名的數(shù)據(jù)進(jìn)行RSA解密*/ Ciphercipher=Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE,key); /**執(zhí)行解密操作*/ byte[]b=cipher.doFinal(buf); returnb;}MD5消息摘要//生成消息摘要方法privateStringencrypt(StringinputText){ try{//獲得MD5摘要類 MessageDigestm=MessageDigest.getInstance("md5");//將消息轉(zhuǎn)換為字節(jié)數(shù)組 m.update(inputText.getBytes("UTF8"));//生成消息摘要字節(jié)數(shù)組 bytes[]=m.digest(); returnhex(s); }catch(NoSuchAlgorithmExceptione){ e.printStackTrace(); }catch(UnsupportedEncodingExceptione){ e.printStackTrace(); } returnnull; }安全聊天//消息發(fā)送方法publicvoidsendData()throwsException{ PrintWriterout=newPrintWriter(newBufferedWriter(//獲取對(duì)輸出流(發(fā)送數(shù)據(jù))的控制 newOutputStreamWriter(socket.getOutputStream())),true); StringmessageString=sendmessage.getText();//對(duì)輸入消息進(jìn)行用des加密 Strings=des.encrypt(messageString); //發(fā)送給對(duì)方 out.println(s);//判斷是否為byte結(jié)束 if(messageString.equals("byte")){//斷開連接,釋放資源 if(socket!=null){ socket=null; } if(serverSocket!=null){ serverSocket=null; } } }//消息接收方法publicvoidreceiveData()throwsException{//獲取網(wǎng)絡(luò)輸入流的控制 BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream()));//獲取一行消息 Stringstr=in.readLine(); if(str.equals("byte")){ if(socket!=null){ socket=null; } if(serverSocket!=null){ serverSocket=null; } } }消息保存publicvoidwrite_file(Stringmessages){ StringpathString=path_jTextField.getText();//判斷路徑輸入 if(pathString.length()<3){ JOptionPane.showMessageDialog(null,"請(qǐng)輸入正確路徑!"); return; } pathString=pathString+"\\message.txt"; Filefile=newFile(pathString); try{ FileWriterfileWriter=newFileWriter(file);//寫入文件 fileWriter.write(messages); JOptionPane.showMessageDialog(null,"密文已經(jīng)保存成功!"); fileWriter.close(); }catch(IOExceptione1){ e1.printStackTrace(); } }5軟件測(cè)試過(guò)程5.1測(cè)試環(huán)境①硬件環(huán)境:筆記本電腦一臺(tái)②軟件環(huán)境:eclipse編譯環(huán)境③網(wǎng)絡(luò)環(huán)境:良好的網(wǎng)絡(luò)環(huán)境5.2功能測(cè)試①模擬現(xiàn)場(chǎng)測(cè)試:RSA生成密鑰成功,加密字符串,解密字符串,生成消息摘要成功,對(duì)消息摘要進(jìn)行數(shù)字簽名成功,安全聊天成功,保存文件成功完全達(dá)到預(yù)期的效果。②應(yīng)用現(xiàn)場(chǎng)測(cè)試:和模擬現(xiàn)場(chǎng)測(cè)試一樣,沒(méi)有數(shù)據(jù)出錯(cuò)。5.3性能測(cè)試安全即時(shí)通訊軟件性能表現(xiàn)很好,從開始到現(xiàn)實(shí)界面的時(shí)間不長(zhǎng),在用戶可以忍受的范圍了,對(duì)于造成這種情況的是java這門語(yǔ)言本身造成的。在安全聊天過(guò)程中,用戶的消息

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論