![畢業(yè)設(shè)計(jì)(論文)Linux環(huán)境下的密文聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-10/9/ba0faa80-b2bf-4c4e-a748-f34fd75e84ce/ba0faa80-b2bf-4c4e-a748-f34fd75e84ce1.gif)
![畢業(yè)設(shè)計(jì)(論文)Linux環(huán)境下的密文聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-10/9/ba0faa80-b2bf-4c4e-a748-f34fd75e84ce/ba0faa80-b2bf-4c4e-a748-f34fd75e84ce2.gif)
![畢業(yè)設(shè)計(jì)(論文)Linux環(huán)境下的密文聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-10/9/ba0faa80-b2bf-4c4e-a748-f34fd75e84ce/ba0faa80-b2bf-4c4e-a748-f34fd75e84ce3.gif)
![畢業(yè)設(shè)計(jì)(論文)Linux環(huán)境下的密文聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-10/9/ba0faa80-b2bf-4c4e-a748-f34fd75e84ce/ba0faa80-b2bf-4c4e-a748-f34fd75e84ce4.gif)
![畢業(yè)設(shè)計(jì)(論文)Linux環(huán)境下的密文聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-10/9/ba0faa80-b2bf-4c4e-a748-f34fd75e84ce/ba0faa80-b2bf-4c4e-a748-f34fd75e84ce5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、linuxlinux 環(huán)境下的密文聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)環(huán)境下的密文聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)摘摘 要要隨著計(jì)算機(jī)的不斷普及和互聯(lián)網(wǎng)技術(shù)在全球領(lǐng)域的高速發(fā)展。越來(lái)越多的人使用到了聊天程序。聊天程序給人們帶來(lái)通信便利的同時(shí)也存在著一些安全隱患,傳統(tǒng)的聊天程序以明文方式傳送聊天內(nèi)容,這樣就給一些用心不良的人大開(kāi)方便之門(mén)。本系統(tǒng)正是基于以上原因而設(shè)計(jì)的加密聊天程序。聊天程序采用服務(wù)器/客戶端模式。在 linux 環(huán)境下采用 socket 套接口編程,服務(wù)器程序以創(chuàng)建線程池的方式為每一個(gè)客戶服務(wù)。聊天內(nèi)容由服務(wù)器轉(zhuǎn)發(fā)。在聊天程序中加入了對(duì)稱加密算法 des 和非對(duì)稱加密算法 rsa。其基本實(shí)現(xiàn)是由服務(wù)器端生成
2、 rsa 的公鑰和私鑰,由客戶端生成 des 對(duì)稱密鑰,服務(wù)器端傳送公鑰至客戶端加密 des 密鑰之后回傳服務(wù)器,服務(wù)器再用本地的私鑰解密獲得 des 密鑰。此后雙方的通信由 des 密鑰加密后傳送,這樣既能高效的加密明文又能在信道上安全的傳送密鑰使得密鑰間的共享成為現(xiàn)實(shí)。關(guān)鍵詞:關(guān)鍵詞:對(duì)稱加密算法;非對(duì)稱加密算法;會(huì)話密鑰;聊天系統(tǒng) the design and implementation of encrypted chat system based on linuxabstractalong with computer becoming more and more popular an
3、d internet technology developing rapidly, a lot of people began to use the im(chat program). chat program brings people more convenience, but at the same time, security problem existed. the traditional chat program sends the message by plain text, which open the door for the bad man. this encrypted
4、chat system is right based on the point. the system is in c/s architecture using socket based on linux. the server program serves each client in the way of establishing thread and is responsible to transfer message. the des algorithm and rsa algorithm are used to encrypt in this program. the basic p
5、rinciple is that the server generates rsa public key and private key and client generates des symmetrical secret key. firstly, the server sends the public key to client, and then client sends it back after encrypting des secret key. secondly, the server uses local private key to decode to obtain the
6、 des private key. after then, the message is sent after encrypted by des secret key. so the plain text can be encrypted effectively and sent in channel in security.key words: symmetry encrypting program; unsymmetrical encrypting program; conversation key; chat system目目 錄錄論文總頁(yè)數(shù):30 頁(yè)1引言.11.1課題背景.11.2國(guó)
7、內(nèi)外研究現(xiàn)狀.11.3本課題研究的意義.12所采用技術(shù)的先進(jìn)性分析.12.1des 算法 .12.2rsa 算法 .22.3線程池.23系統(tǒng)需求分析.33.1聊天程序功能分析.33.2加密算法.34系統(tǒng)總體設(shè)計(jì)和模塊劃分.34.1系統(tǒng)總體設(shè)計(jì).34.2模塊劃分.44.2.1des 算法模塊 .44.2.2rsa 算法模塊 .64.2.3聊天程序模塊.75系統(tǒng)實(shí)現(xiàn).95.1des 核心代碼 .95.2rsa 核心代碼 .125.3web 注冊(cè)頁(yè)面核心代碼 .155.4服務(wù)器端核心代碼.185.5客戶端核心代碼.21結(jié) 論.25參考文獻(xiàn).25致 謝.26聲 明.27附 錄.28第 1 頁(yè) 共 30
8、 頁(yè)1 1 引言引言1.11.1 課題背景課題背景自從 tcp/ip 協(xié)議族成為計(jì)算機(jī)通信的主要網(wǎng)絡(luò)協(xié)議,基于該協(xié)議族開(kāi)發(fā)的網(wǎng)絡(luò)應(yīng)用程序數(shù)不勝數(shù)。聊天程序便是其中之一。聊天程序使人們可以通過(guò)互聯(lián)網(wǎng)及時(shí)傳送消息,讓遠(yuǎn)在千里之外的人們暢所欲言。傳統(tǒng)的聊天程序在給人們帶來(lái)方便的同時(shí)也逐漸暴露出一些安全隱患。前不久網(wǎng)上登出了這樣一則新聞:上海某銀行的白領(lǐng)麗人,因?yàn)榱奶斐绦蚴鼙O(jiān)控被同事知道了個(gè)人隱私,被迫辭去了月薪三萬(wàn)余元的工作。于是聊天程序的安全性受到了人們的廣泛關(guān)注。1.21.2 國(guó)內(nèi)外研究現(xiàn)狀國(guó)內(nèi)外研究現(xiàn)狀從國(guó)內(nèi)外對(duì)聊天程序的加密情況看,大多數(shù)處理方式是在現(xiàn)有的聊天程序基礎(chǔ)之上添加相應(yīng)的加密插件來(lái)
9、實(shí)現(xiàn)加密。比較典型的例子是 linux 平臺(tái)下的多集成聊天程序 gaim,其中集成了 icq、msn、qq 等現(xiàn)今主流國(guó)內(nèi)外聊天程序。普遍的聊天程序沒(méi)有經(jīng)過(guò)加密而直接傳輸聊天明文。gaim 通過(guò)添加插件程序?qū)ξ醇用艿牧奶斐绦蜻M(jìn)行加密傳輸,通信雙方需要只要同時(shí)安裝加密插件就可以順利的對(duì)聊天內(nèi)容進(jìn)行加密解密。這其中存在一個(gè)現(xiàn)而易見(jiàn)的問(wèn)題:要是一方加入了加密插件而另一方卻沒(méi)有相應(yīng)的解密程序顯然雙方不能正確通信。1.31.3 本課題研究的意義本課題研究的意義聊天程序是否加密關(guān)系著用戶的切身利用。為了保衛(wèi)公民隱私權(quán)不受到網(wǎng)絡(luò)黑客的不法侵犯,開(kāi)發(fā)加密傳輸信息的聊天程序有著重大意義。聊天程序的加密特性對(duì)用戶
10、應(yīng)該是透明的。正如前面分析,如果以安裝插件的方式加密聊天程序很可能造成通信雙方加密不一致的情況。因此將加密算法內(nèi)嵌入聊天程序可以保證通信雙方均能正常通信。傳統(tǒng)的對(duì)稱加密算法如 des 雖然可以快速的加密和解密明文,然而其密鑰難以分配和管理。如果讓通信雙方相互約定密鑰顯然是不合適的,因此最好的方式是由一方產(chǎn)生密鑰然后傳送給另一方?;诠€的非對(duì)稱加密體制的引入正是用于解決對(duì)稱加密算法在密鑰管理上的不足,但是非對(duì)稱加密算法如 rsa存在運(yùn)算強(qiáng)度過(guò)大、費(fèi)時(shí)較長(zhǎng)等問(wèn)題。如果直接用于加密聊天程序,其生成密鑰和加密解密所需時(shí)間是人們?cè)谕ㄐ胚^(guò)程中所不能容忍的,采取將兩種加密算法相結(jié)合的方式可以很好的解決以上
11、問(wèn)題,從而達(dá)到安全快速的加密數(shù)據(jù)。第 2 頁(yè) 共 30 頁(yè)2 2所采用技術(shù)的先進(jìn)性分析所采用技術(shù)的先進(jìn)性分析2.12.1 desdes 算法算法des 是 data encryption standard(數(shù)據(jù)加密標(biāo)準(zhǔn))的縮寫(xiě)。它是由 ibm公司研制的一種加密算法,美國(guó)國(guó)家標(biāo)準(zhǔn)局于 1977 年公布把它作為非機(jī)要部門(mén)使用的數(shù)據(jù)加密標(biāo)準(zhǔn),二十年來(lái),它一直活躍在國(guó)際保密通信的舞臺(tái)上,扮演了十分重要的角色。des 是一個(gè)分組加密算法,它以 64 位為分組對(duì)數(shù)據(jù)加密。同時(shí) des 也是一個(gè)對(duì)稱算法:加密和解密用的是同一個(gè)算法。它的密鑰長(zhǎng)度是 56 位(因?yàn)槊總€(gè)第 8 位都用作奇偶校驗(yàn)),密鑰也可以是任
12、意的 56 位數(shù),而且可以任意時(shí)候改變。其中有極少量的數(shù)被認(rèn)為是弱密鑰,但是很容易避開(kāi)它們。所以保密性依賴于密鑰。2.22.2 rsarsa 算法算法1978 年,美國(guó)麻省理工學(xué)院(mit)的研究小組成員 ronald l rivest、adi shamir、 leonard adleman 提出了一種基于公開(kāi)密鑰密碼體制的優(yōu)秀加密算法rsa 算法。rsa 的取名就是來(lái)自這三位發(fā)明者姓氏的第一個(gè)字母。該算法以其較高的保密強(qiáng)度逐漸成為一種廣為接受的公鑰密碼體制算法。rsa 算法是一種分組密碼體制算法,它的保密強(qiáng)度是建立在具有大素?cái)?shù)因子的合數(shù),其因子分解 np(nondeterministic p
13、olynomial)完全問(wèn)題這一數(shù)學(xué)難題的基礎(chǔ)上的,因此 rsa 算法具有很強(qiáng)的保密性。rsa 算法研制的最初目標(biāo)是解決 des 算法秘密密鑰利用公開(kāi)信道傳輸分發(fā)困難的難題,而實(shí)際結(jié)果不但很好地解決了這個(gè)難題;還可利用 rsa 來(lái)完成對(duì)消息的數(shù)字簽名以防對(duì)消息的抵賴;同時(shí)還可以利用數(shù)字簽名發(fā)現(xiàn)攻擊者對(duì)消息的非法篡改,以保護(hù)數(shù)據(jù)信息的完整性。rsa 算法是第一個(gè)能同時(shí)用于加密和數(shù)字簽名的算法,也易于理解和操作。rsa 是被研究得最廣泛的公鑰算法,普遍認(rèn)為是目前最優(yōu)秀的公鑰方案之一。rsa 得到了世界上的最廣泛的應(yīng)用,并于 1992 年 iso 國(guó)際標(biāo)準(zhǔn)化組織在其頒發(fā)的國(guó)際標(biāo)準(zhǔn) x.509 中,將
14、 rsa 算法正式納入國(guó)際標(biāo)準(zhǔn)。2.32.3 線程池線程池在傳統(tǒng)的 unix 模型中,當(dāng)一個(gè)進(jìn)程需要另一個(gè)實(shí)體來(lái)完成某事時(shí),它就fork 一個(gè)子進(jìn)程并讓子進(jìn)程去執(zhí)行處理。unix 上的大多數(shù)網(wǎng)絡(luò)服務(wù)器程序就是這么編寫(xiě)的,父進(jìn)程 accept 一個(gè)連接,fork 一個(gè)子進(jìn)程,該子進(jìn)程處理與該連接對(duì)端的客戶之間的通信。盡管這種范式多少年來(lái)一直良好地服務(wù)著,fork 調(diào)用卻存在一些問(wèn)題:1 fork 是昂貴的。fork 要把父進(jìn)程的內(nèi)存映象拷貝到子進(jìn)程,并在子進(jìn)程中復(fù)制第 3 頁(yè) 共 30 頁(yè)所有描述字,如此等等。2 fork 返回之后父進(jìn)程之間信息的傳遞需要進(jìn)程間通信(ipc)機(jī)制。調(diào)用 fork
15、 之前父進(jìn)程向尚存在的子進(jìn)程傳遞信息相當(dāng)容易。因?yàn)樽舆M(jìn)程將從父進(jìn)程數(shù)據(jù)空間及所有描述字的一個(gè)拷貝開(kāi)始運(yùn)行。然而從子進(jìn)程往父進(jìn)程返回信息卻比較費(fèi)力。線程有助于解決這兩個(gè)問(wèn)題。線程有時(shí)稱為輕權(quán)進(jìn)程(lightweight process) ,因?yàn)榫€程比進(jìn)程“權(quán)重輕些” 。也就是說(shuō),線程的創(chuàng)建可能比進(jìn)程的創(chuàng)建快 10100 倍。線程池是指在服務(wù)器啟動(dòng)階段預(yù)先創(chuàng)建一系列線程阻塞于 accept 調(diào)用,每個(gè)客戶由當(dāng)前可用線程池中的某個(gè)(閑置)線程處理。這種處理方式比通常的客戶連接到來(lái)時(shí)臨時(shí)創(chuàng)建線程為其服務(wù)要快得多??梢垣@得很好的性能加速。3 3系統(tǒng)需求分析系統(tǒng)需求分析3.13.1 聊天程序功能分析聊天程
16、序功能分析1 注冊(cè)功能通常聊天程序需要用戶名和密碼才能使用,所以需要實(shí)現(xiàn) web 注冊(cè)功能,這樣用戶可以很方便的通過(guò) web 網(wǎng)站注冊(cè)自己的用戶名并取得密碼,還可以在服務(wù)器上存儲(chǔ)個(gè)人相關(guān)信息以便他人查看。2 登陸功能用戶在聊天之前需要輸入用戶名和密碼進(jìn)行登陸以便獲取自身相關(guān)信息和好友相關(guān)信息,故登陸過(guò)程中服務(wù)器需對(duì)用戶名和密碼進(jìn)行必要的核對(duì)。3 聊天功能這是聊天程序的主要功能。用戶之間的相互通信必須及時(shí)快速的由服務(wù)器轉(zhuǎn)發(fā)。3.23.2 加密算法加密算法由于是加密聊天程序,故對(duì)聊天明文的加密算法應(yīng)選取加密速度相對(duì)較快的對(duì)稱加密算法(如:des) ,又由于 des 的加密密鑰是不能公開(kāi)的秘密密鑰,
17、故對(duì) des 的密鑰應(yīng)加密傳送,所以應(yīng)采用非對(duì)稱的公鑰加密算法(如 rsa)用以分發(fā) des 密鑰。des 加密算法:作為對(duì)稱加密算法中的 des 加密算法由于其加密過(guò)程是固定不變的,故應(yīng)考慮其密鑰的生成。由于弱密鑰存在的可能性,還應(yīng)該考慮如何避免生成弱密鑰。因?yàn)椴罘址治龇ǖ奶岢隹梢钥焖俚钠平馍儆?16 輪迭代的 des 算法,故應(yīng)保證其迭代次數(shù)至少為 16 輪。rsa 加密算法:由于 rsa 是基于大素?cái)?shù)因子分解這一數(shù)學(xué)難題提出的,故 rsa 中公鑰和私第 4 頁(yè) 共 30 頁(yè)鑰的產(chǎn)生應(yīng)重點(diǎn)考慮。又由于 rsa 的運(yùn)算強(qiáng)度較大,故還應(yīng)考慮如何加速其運(yùn)算速度。4 4系統(tǒng)總體設(shè)計(jì)和模塊劃分系統(tǒng)總
18、體設(shè)計(jì)和模塊劃分4.14.1 系統(tǒng)總體設(shè)計(jì)系統(tǒng)總體設(shè)計(jì)圖 1 系統(tǒng)設(shè)計(jì)如圖 1 所示,本系統(tǒng)采用 c/s 模式。1 用戶通過(guò) web 應(yīng)用程序注冊(cè)帳號(hào),然后用注冊(cè)的帳號(hào)登陸聊天程序服務(wù)器。2 客戶端產(chǎn)生生成 des 密鑰,服務(wù)器端在啟動(dòng)時(shí)初始化產(chǎn)生 rsa 公鑰和私鑰。當(dāng)客戶端向服務(wù)器發(fā)起連接時(shí),服務(wù)器送出 rsa 公鑰,客戶端用取得的公鑰加密產(chǎn)生的 des 私鑰回傳服務(wù)器。3 最后服務(wù)器與客戶端雙方的通信均由 des 加密算法加密通信明文。4.24.2 模塊劃分模塊劃分4.2.14.2.1 desdes 算法模塊算法模塊1 加密算法 3 個(gè)主要步驟第一步,初始置換 ip第 5 頁(yè) 共 30
19、頁(yè)圖 2 初始置換表 ip圖 2 為初始置換表 ip,64bit 輸入明文經(jīng)過(guò)該表完成初始置換。第二步,16 輪迭代圖 3 16 輪迭代圖 3 為 des16 輪迭代,將經(jīng)過(guò)初始置換的數(shù)據(jù)分成 li 和 ri 兩部分。將 ri直接交換為 li+1,li 與 ri 經(jīng)過(guò) f 函數(shù)處理后的數(shù)據(jù)相異或得 ri+1,最后一輪不做交換。第三步,逆置換第 6 頁(yè) 共 30 頁(yè)圖 4 逆置換表(ip-1)圖 4 為逆置換表(ip-1),經(jīng)過(guò) 16 輪迭代后通過(guò)該表置換得到輸出的密文。2 子密鑰的產(chǎn)生圖 5 生成子密鑰圖 5 為子密鑰生成過(guò)程,將 64bit 初始密鑰經(jīng)過(guò) pc-1 表置換為 56bit 輸入
20、,分為 ci, di 兩組分別進(jìn)行 ls 循環(huán)左移,再經(jīng)過(guò) pc-2 表壓縮為 48bit 子密鑰。如此循環(huán) 16 輪生成 16 組子密鑰。4.2.24.2.2 rsarsa 算法模塊算法模塊1 大數(shù)的運(yùn)算加法運(yùn)算:設(shè)定相應(yīng)的進(jìn)位變量 c,按位相加,如 ri = ai + bi + c,當(dāng) ai + bi + c m (m 為權(quán)值),c 送 1,ri = (ai + bi + c) mod m, 否則 c 送 0。減法運(yùn)算:設(shè)定相應(yīng)的借位變量 c,按位相減,如 ri = ai bi + c,當(dāng) ai m (m 位權(quán)值),c 送 ri/m (m 為權(quán)值),d 為從對(duì)應(yīng)的內(nèi)外循環(huán)位之和(i + j
21、)對(duì)應(yīng)的結(jié)果位上取得的值。r(i + j)暫時(shí)存入第 7 頁(yè) 共 30 頁(yè)對(duì)應(yīng)的結(jié)果位。除法運(yùn)算:假設(shè) a 為被除數(shù),b 為除數(shù)。當(dāng) a b,將 b 擴(kuò)大到 a 相同位數(shù),循環(huán)做 a = a bk (擴(kuò)充后的 b),商位 qi = qi + 1,最后 a 為余數(shù)。取余運(yùn)算:依除法運(yùn)算輸出余數(shù) a。乘方運(yùn)算:與乘法運(yùn)算一樣設(shè)有進(jìn)位變量 c 和取當(dāng)前結(jié)果位值變量 d。依然分內(nèi)外兩層循環(huán)。外層循環(huán)中 d = r (2 * i),r(2 * i) = d + ai * ai,在此僅計(jì)算相同位 ai 的乘積存入結(jié)果位 r(2 * i)中。內(nèi)層循環(huán) d = r (i + j),r(i + j) = d +
22、 2 * ai * aj + c,這里由于乘數(shù) a 和被乘數(shù) b 相等,故可以采用 2 * ai * aj,這種方式提前運(yùn)算對(duì)應(yīng)位??梢钥闯鲞@種預(yù)處理方式加快了運(yùn)算速度。模冪運(yùn)算:將模冪運(yùn)算轉(zhuǎn)化為乘模運(yùn)算。定理:(a * b) mod n = (a mod n) * (b mod n) mod n。計(jì)算 am mod n:令 c = 1,如果 m = m % 2 = 0 循環(huán)計(jì)算 a = (a * a) mod n 否則 m = m 1,c = (a * c) mod n。最后輸出 c。2 選取 p,q先以生成隨機(jī)數(shù)的方式生成隨機(jī)奇數(shù) a、b。再讓 a、b 依次通過(guò) miller-rabin
23、素性測(cè)試。miller-rabin 素性測(cè)試:先計(jì)算出 m、j,使得 n-1=m*2j,其中 m 是正奇數(shù),j 是非負(fù)整數(shù),隨機(jī)取一個(gè) b,2 b)r = a mod b, a = b,b = r 循環(huán)以上三步直到 r = 0, 則 a 為所求最小公因數(shù)。r = a mod b = x * a + y * b = r。 x 稱為 a 的逆元。在每步循環(huán)過(guò)程中將前一步中的 r 代入下一步中合并后可求得逆元 x。4.2.34.2.3 聊天程序模塊聊天程序模塊1、數(shù)據(jù)庫(kù)設(shè)計(jì)用戶信息表 user_infor (存儲(chǔ)注冊(cè)用戶的信息)create table user_info第 8 頁(yè) 共 30 頁(yè)(u
24、ser_id integer auto_increment primary key,user_name varchar (50) not null,user_passwd varchar (10) not null,user_sex varchar (10),user_age integer,user_address varchar (100),index (user_name) engine = innodb; #指定存儲(chǔ)引擎好友關(guān)系表 friend_index (記錄用戶添加的好友)create table user_online(user_id integer primary key,i
25、p_address varchar (100) not null,conn_socket integer not null,foreign key (user_id) references user_info (user_id) engine = innodb;在線用戶記錄表 user_online (記錄已登陸的在線用戶和與服務(wù)器建立的套接口)create table user_online(user_id integer primary key,conn_socket integer not null,des_key varchar (30) not null,foreign key (u
26、ser_id) references user_info (user_id) engine = innodb;消息記錄表 messages (緩存發(fā)給離線用戶的消息)create table messages(message_id integer auto_increment primary key,from_id integer not null,to_id integer not null,body text not null,date_posted timestamp not null,第 9 頁(yè) 共 30 頁(yè)index (to_id),foreign key (from_id) ref
27、erences user_info (user_id),foreign key (to_id) references user_info (user_id) engine = innodb;2、web 注冊(cè)頁(yè)面模塊用戶管理:用于管理用戶的注冊(cè)和登陸。添加好友:查詢數(shù)據(jù)庫(kù)中注冊(cè)用戶,選擇要添加的好友插入數(shù)據(jù)庫(kù)。3、聊天程序服務(wù)器端初始化套接口,初始化 rsa 算法生成公鑰和私鑰 創(chuàng)建線程池等待連接 送出 rsa 公鑰 接收 des 密鑰 驗(yàn)證登陸信息 服務(wù)登陸客戶負(fù)責(zé)消息轉(zhuǎn)發(fā)。4、聊天程序客戶端初始化套接口,生成 des 密鑰,向服務(wù)器發(fā)起連接 取得 rsa 公鑰加密des 密鑰后回傳服務(wù)器 發(fā)
28、送登陸信息 接收好友信息 創(chuàng)建發(fā)送消息線程和接收消息線程與好友通信。5 5系統(tǒng)實(shí)現(xiàn)系統(tǒng)實(shí)現(xiàn)5.15.1 desdes 核心代碼核心代碼des 類聲明class despublic :des (unsigned long long); /構(gòu)造函數(shù)僅傳入密鑰void encrypting (unsigned long long &); /加密函數(shù)void decrypting (unsigned long long &); /解密函數(shù)private :/明文處理=bitset ip_permute (unsigned long long); /初始置換unsigned long long ip_1
29、_permute (bitset); /逆置換/加密過(guò)程=bitset e_permute (bitset);/e 盒子置換unsigned long long b1b6 (bitset, int, int);unsigned long long b2b3b4b5 (bitset, int, int, int, int);bitset sbox_process (bitset); /s 盒子置換void p_permute (bitset &); /p 置換第 10 頁(yè) 共 30 頁(yè)bitset f (bitset, bitset); /f 函數(shù)/子密鑰生成=bitset pc_1_permu
30、te (unsigned long long); /pc-1 置換void lsi (bitset &, int); /循環(huán)左移bitset pc_2_permute (bitset); /pc-2 置換void create_k (unsigned long long);bitset k16; /子密鑰數(shù)組;子密鑰生成void des : create_k (unsigned long long key)bitset cidi (0);cidi = pc_1_permute (key); /pc-1 置換bitset ci (0), di (0);for (int i = 0; i 56;
31、i+) /將經(jīng)過(guò) pc-1 置換的數(shù)據(jù)分成左右 28 比特if (i 28)cii = cidii;elsedii - 28 = cidii;for (int i = 0; i 16; i+) /16 輪循環(huán)lsi (ci, lsii); /ls 循環(huán)左移lsi (di, lsii); /ls 循環(huán)左移for (int j = 0; j 56; j+) /再將 28 比特?cái)?shù)據(jù)合為 56 比特?cái)?shù)據(jù)if (j 28)cidij = cij;elsecidij = dij - 28;ki = pc_2_permute (cidi); /存入子密鑰數(shù)組第 11 頁(yè) 共 30 頁(yè)加密算法void des
32、 : encrypting (unsigned long long &msg)bitset ip (0);bitset li (0), ri (0), buf (0);ip = ip_permute (msg); /ip 初始置換for (int i = 0; i 64; i+) /等分成左右 32 位數(shù)據(jù)if (i 32)lii = ipi;elserii - 32 = ipi; for (int i = 0; i 16; i+) /16 輪迭代if (i != 15)buf = li;li = ri; /li = ri-1ri = f (ri, ki); /f 函數(shù)處理 ri-1ri =
33、buf; /ri = f (ri-1, ki) xor li-1else /最后不再互換buf = ri;ri = f (ri, ki);li = ri;ri = buf;for (int i = 0; i 64; i+) /將兩部分 32 數(shù)據(jù)組合回 64 位數(shù)據(jù)if (i 32)第 12 頁(yè) 共 30 頁(yè)ipi = lii;elseipi = rii - 32;msg = ip_1_permute (ip); /ip-1 逆置換return;5.25.2 rsarsa 核心代碼核心代碼大數(shù)類聲明class bignumpublic :bignum (char *a = null, unsi
34、gned long n = 0, status s = 0);bignum () ;bignum absadd (bignum, bignum); /絕對(duì)值相加bignum abssub (bignum, bignum); /絕對(duì)值相減bignum operator + (bignum); /加號(hào)重載bignum operator - (bignum); /減號(hào)重載bignum operator * (bignum); /乘號(hào)重載bignum operator / (bignum); /除號(hào)重載bignum operator % (bignum); /取余重載bignum square ();
35、 /乘方運(yùn)算bignum & operator = (unsigned long); /循環(huán)右移friend bool operator (bignum, bignum); / (bignum, bignum); /重載為友元friend bool operator = (bignum, bignum); /=重載為友元friend bool operator = (bignum, bignum); /=重載為友元friend bool operator != (bignum, bignum); /!=重載為友元void print ();unsigned long getsize () re
36、turn (size);char *getnum () return (num);private :char nummaxnum;第 13 頁(yè) 共 30 頁(yè)unsigned long size;status symbol; /正數(shù)為 1,零為 0,負(fù)數(shù)為-1;模冪運(yùn)算bignum modexp (bignum x, bignum r, bignum p) /依據(jù)定理 (a * b)mod n = (a mod n) * (b mod n) mod nbignum a, b, c (1, 1, 1), one (1, 1, 1), zero (0, 1, 0), two (2, 1, 1);a
37、= x;b = r;while (b != zero)if (b % two = zero) /是否為偶數(shù)b = b / two; /降階a = a.square () % p; /乘方對(duì) p 取余continue;b = b - one;c = (a * c) % p; /乘模運(yùn)算return (c);歐幾里德計(jì)算最大公因數(shù)和逆元bignum rsa : gcd (bignum &a, bignum &b, bignum x, bignum y) /gcd (x, y) = gcd (y, x mod y), 對(duì)式子 ax + by = r, /每一步迭代中 ai = ai-2 q * ai
38、-1, bi = bi-2 q *bi-1/其中 q 為當(dāng)前這步的商bignum zero (0, 1, 0);bignum q, r, ai_2 (1, 1, 1), ai_1 (0, 1, 0), bi_2 (0, 1, 0), bi_1 (1, 1, 1);if (x y) /x、y 互換bignum c = y;y = x;x = c;第 14 頁(yè) 共 30 頁(yè)r = y;while (x % r) != zero) /輾轉(zhuǎn)相除y = x;x = r;q = y / r;r = y % r;a = ai_2 - (q * ai_1); /迭代前兩步 x,y 逆元表達(dá)式系數(shù)b = bi_
39、2 - (q * bi_1);ai_2 = ai_1;bi_2 = bi_1;ai_1 = a;bi_1 = b;return (r);miller-rabin 素性測(cè)試bool prime_num : miller_rabin (bignum n, bignum b) /令 n 1 = 2lm,其中 l 是非負(fù)整數(shù),m 是正奇數(shù)。 /若 bm = 1 (mod n) 或 b(2j)m = (n - 1) mod n 0=i = j -1 /則稱 n 通過(guò)以 b 為基的 miller-rabin 測(cè)試bignum m, j (0, 1, 0), one (1, 1, 1), two (2, 1
40、, 1), zero (0, 1, 0);bignum v;m = n - one;while (m % two) = zero) /將 n-1 處理為 2 的 l 次方乘以 mm = m / two;j = j + one;if (b two)cout error b! endl;exit (0);第 15 頁(yè) 共 30 頁(yè)v = modexp (b, m, n);if (v = one) /若 b 的 m 次方對(duì) n 取余等于 1 通過(guò)測(cè)試return (true);bignum i (0, 1, 0);while (i j)if (v = (n - one) /滿足 b(2j)m = (
41、n - 1) (mod n),測(cè)試結(jié)束return (true);v = v.square () % n;i = i + one;return (false);5.35.3 webweb 注冊(cè)頁(yè)面核心代碼注冊(cè)頁(yè)面核心代碼用戶管理?phpclass usermanager /用戶管理類,用于管理用戶賬戶function _construct () public function isvaliduserid ($in_userid) /驗(yàn)證用戶 id 的合法性if ($in_userid = or $in_userid 0)return false;return true;public funct
42、ion isvalidusername ($in_user_name) /用正則表達(dá)式檢測(cè)輸入名字的合法性if ($in_user_name = or !ereg (:alnum:_-1,50, $in_user_name)return false;elsereturn true;第 16 頁(yè) 共 30 頁(yè)public function isvalidpassword ($in_passwd) /檢測(cè)輸入密碼的合法性if ($in_passwd = or strlen ($in_passwd) 10)echo password len . strlen ($in_passwd);return
43、false;elsereturn true;public function createaccount ($in_uname, $in_pw, $in_sex, $in_age, $in_address) /創(chuàng)建賬戶,插入數(shù)據(jù)庫(kù)if (!$this-isvalidusername ($in_uname) /檢查用戶名是否正確,如果錯(cuò)誤給出相應(yīng)錯(cuò)誤提示echo errorthe user name is not right or the length is too long!the page will go back after 2 seconds.error;exit;if (!$this-i
44、svalidpassword ($in_pw) /檢查密碼是否正確,如果錯(cuò)誤給出相應(yīng)錯(cuò)誤提示echo errorthe password is not right or the length is too long!the page will go back after 2 seconds.error;exit;第 17 頁(yè) 共 30 頁(yè)$conn = $this-getconnection (); /創(chuàng)建到數(shù)據(jù)庫(kù)的連接$conn-autocommit (false); /關(guān)閉自動(dòng)提交至數(shù)據(jù)庫(kù)為事務(wù)處理狀態(tài)$qstr = query ($qstr); /執(zhí)行查詢語(yǔ)句if ($result1 =
45、 false)$conn-rollback (); /出錯(cuò)后事務(wù)回滾echo insert user_info false. message : .$conn-error;exit;$user_id = $conn-insert_id;$result2 = $conn-commit (); /提交查詢if ($result2 = false)echo commit insert false. message : .$conn-error;exit;$conn-close (); /關(guān)閉數(shù)據(jù)庫(kù)連接return $user_id; /返回用戶賬號(hào)public function userlogin
46、($user_id, $in_password) /處理用戶登錄$conn = $this-getconnection (); /連接數(shù)據(jù)庫(kù)$check = query ($check); /執(zhí)行查詢語(yǔ)句if ($result = false)echo select user_info false! message: .$conn-error;第 18 頁(yè) 共 30 頁(yè)exit;if ($row = $result-fetch_assoc () = null) /檢查登陸用戶信息是否正確,如果錯(cuò)誤返回 false$conn-close ();return false;$conn-close (
47、);return $row;private function getconnection () /連接數(shù)據(jù)庫(kù)$conn = new mysqli (localhost, andy, andy2000, freechat);if (mysqli_connect_errno () != 0)$errno = mysqli_connect_errno (); /獲取數(shù)據(jù)庫(kù)連接錯(cuò)誤號(hào)$errmsg = mysqli_connect_error (); /獲取數(shù)據(jù)庫(kù)連接錯(cuò)誤信息echo connect database failed with: ($errno) $errmsg.;exit;return
48、 $conn;?第 19 頁(yè) 共 30 頁(yè)5.45.4 服務(wù)器端核心代碼服務(wù)器端核心代碼圖 6 服務(wù)器完成初始化圖 6 為服務(wù)器初始化過(guò)程和為已登錄用戶服務(wù)的過(guò)程。服務(wù)器先生成 rsa算法所需的公鑰和私鑰,當(dāng)連接到來(lái)時(shí)服務(wù)器送出 rsa 公鑰并等待用戶回傳des 密鑰。當(dāng)用戶傳回 des 密鑰后,服務(wù)器用 rsa 私鑰解密得到 des 密鑰。此后用戶登錄信息由此 des 密鑰解密,用戶發(fā)送的消息由服務(wù)器轉(zhuǎn)發(fā)。線程函數(shù),為登陸客戶服務(wù)void service (int connfd, rsa rsa)char bufmaxline;user_login *login;int n, check;unsigned long long key;publickey pk;pk.e = rsa.e;pk.n = rsa.n;send_rsa_publickey (connfd, pk); /發(fā)送 rsa 公鑰cout 公鑰已送出! endl;第 20 頁(yè) 共 30 頁(yè)cerr
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit 9 What's your hobby 說(shuō)課稿(說(shuō)課稿)-2024-2025學(xué)年湘少版(三起)英語(yǔ)五年級(jí)上冊(cè)
- Unit 3 What Would you like(說(shuō)課稿)-2024-2025學(xué)年人教PEP版英語(yǔ)五年級(jí)上冊(cè)
- 2023九年級(jí)數(shù)學(xué)上冊(cè) 第六章 反比例函數(shù)1 反比例函數(shù)說(shuō)課稿 (新版)北師大版
- 10《爬山虎的腳》說(shuō)課稿-2024-2025學(xué)年語(yǔ)文四年級(jí)上冊(cè)統(tǒng)編版
- 2023三年級(jí)英語(yǔ)下冊(cè) Unit 2 Animals at the Zoo Lesson 8 Tigers and Bears說(shuō)課稿 冀教版(三起)
- 2025民間個(gè)人借款合同書(shū)范文
- 2024-2025學(xué)年高一歷史第13周 6.2卓爾不群的雅典說(shuō)課稿
- 2025常年法律顧問(wèn)合同
- 19《一只窩囊的大老虎》第二課時(shí)(說(shuō)課稿)-2024-2025學(xué)年統(tǒng)編版語(yǔ)文四年級(jí)上冊(cè)001
- 2025獨(dú)家經(jīng)銷合同范本
- 新起點(diǎn)英語(yǔ)二年級(jí)下冊(cè)全冊(cè)教案
- 【幼兒園戶外體育活動(dòng)材料投放的現(xiàn)狀調(diào)查報(bào)告(定量論文)8700字】
- 剪映專業(yè)版:PC端短視頻制作(全彩慕課版) 課件 第3章 短視頻剪輯快速入門(mén)
- 湖南省長(zhǎng)沙市開(kāi)福區(qū)青竹湖湘一外國(guó)語(yǔ)學(xué)校2023-2024學(xué)年九年級(jí)下學(xué)期一模歷史試題
- 漢密爾頓抑郁和焦慮量表
- 風(fēng)電場(chǎng)事故案例分析
- 人教版八年級(jí)數(shù)學(xué)初中數(shù)學(xué)《平行四邊形》單元教材教學(xué)分析
- 八年級(jí)上冊(cè)-2024年中考?xì)v史總復(fù)習(xí)核心考點(diǎn)與重難點(diǎn)(部編版)
- 醫(yī)院科室人才建設(shè)規(guī)劃方案
- 儲(chǔ)油罐安全操作規(guī)程培訓(xùn)
- 護(hù)理飲食指導(dǎo)整改措施及方案
評(píng)論
0/150
提交評(píng)論