畢業(yè)設(shè)計(jì)(論文)Linux環(huán)境下的密文聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)設(shè)計(jì)與實(shí)現(xiàn)_第1頁
畢業(yè)設(shè)計(jì)(論文)Linux環(huán)境下的密文聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)設(shè)計(jì)與實(shí)現(xiàn)_第2頁
畢業(yè)設(shè)計(jì)(論文)Linux環(huán)境下的密文聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)設(shè)計(jì)與實(shí)現(xiàn)_第3頁
畢業(yè)設(shè)計(jì)(論文)Linux環(huán)境下的密文聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)設(shè)計(jì)與實(shí)現(xiàn)_第4頁
畢業(yè)設(shè)計(jì)(論文)Linux環(huán)境下的密文聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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ā)展。越來越多的人使用到了聊天程序。聊天程序給人們帶來通信便利的同時也存在著一些安全隱患,傳統(tǒng)的聊天程序以明文方式傳送聊天內(nèi)容,這樣就給一些用心不良的人大開方便之門。本系統(tǒng)正是基于以上原因而設(shè)計(jì)的加密聊天程序。聊天程序采用服務(wù)器/客戶端模式。在 linux 環(huán)境下采用 socket 套接口編程,服務(wù)器程序以創(chuàng)建線程池的方式為每一個客戶服務(wù)。聊天內(nèi)容由服務(wù)器轉(zhuǎn)發(fā)。在聊天程序中加入了對稱加密算法 des 和非對稱加密算法 rsa。其基本實(shí)現(xiàn)是由服務(wù)器端生成

2、 rsa 的公鑰和私鑰,由客戶端生成 des 對稱密鑰,服務(wù)器端傳送公鑰至客戶端加密 des 密鑰之后回傳服務(wù)器,服務(wù)器再用本地的私鑰解密獲得 des 密鑰。此后雙方的通信由 des 密鑰加密后傳送,這樣既能高效的加密明文又能在信道上安全的傳送密鑰使得密鑰間的共享成為現(xiàn)實(shí)。關(guān)鍵詞:關(guān)鍵詞:對稱加密算法;非對稱加密算法;會話密鑰;聊天系統(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目目 錄錄論文總頁數(shù):30 頁1引言.11.1課題背景.11.2國

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 注冊頁面核心代碼 .155.4服務(wù)器端核心代碼.185.5客戶端核心代碼.21結(jié) 論.25參考文獻(xiàn).25致 謝.26聲 明.27附 錄.28第 1 頁 共 30

8、 頁1 1 引言引言1.11.1 課題背景課題背景自從 tcp/ip 協(xié)議族成為計(jì)算機(jī)通信的主要網(wǎng)絡(luò)協(xié)議,基于該協(xié)議族開發(fā)的網(wǎng)絡(luò)應(yīng)用程序數(shù)不勝數(shù)。聊天程序便是其中之一。聊天程序使人們可以通過互聯(lián)網(wǎng)及時傳送消息,讓遠(yuǎn)在千里之外的人們暢所欲言。傳統(tǒng)的聊天程序在給人們帶來方便的同時也逐漸暴露出一些安全隱患。前不久網(wǎng)上登出了這樣一則新聞:上海某銀行的白領(lǐng)麗人,因?yàn)榱奶斐绦蚴鼙O(jiān)控被同事知道了個人隱私,被迫辭去了月薪三萬余元的工作。于是聊天程序的安全性受到了人們的廣泛關(guān)注。1.21.2 國內(nèi)外研究現(xiàn)狀國內(nèi)外研究現(xiàn)狀從國內(nèi)外對聊天程序的加密情況看,大多數(shù)處理方式是在現(xiàn)有的聊天程序基礎(chǔ)之上添加相應(yīng)的加密插件來

9、實(shí)現(xiàn)加密。比較典型的例子是 linux 平臺下的多集成聊天程序 gaim,其中集成了 icq、msn、qq 等現(xiàn)今主流國內(nèi)外聊天程序。普遍的聊天程序沒有經(jīng)過加密而直接傳輸聊天明文。gaim 通過添加插件程序?qū)ξ醇用艿牧奶斐绦蜻M(jìn)行加密傳輸,通信雙方需要只要同時安裝加密插件就可以順利的對聊天內(nèi)容進(jìn)行加密解密。這其中存在一個現(xiàn)而易見的問題:要是一方加入了加密插件而另一方卻沒有相應(yīng)的解密程序顯然雙方不能正確通信。1.31.3 本課題研究的意義本課題研究的意義聊天程序是否加密關(guān)系著用戶的切身利用。為了保衛(wèi)公民隱私權(quán)不受到網(wǎng)絡(luò)黑客的不法侵犯,開發(fā)加密傳輸信息的聊天程序有著重大意義。聊天程序的加密特性對用戶

10、應(yīng)該是透明的。正如前面分析,如果以安裝插件的方式加密聊天程序很可能造成通信雙方加密不一致的情況。因此將加密算法內(nèi)嵌入聊天程序可以保證通信雙方均能正常通信。傳統(tǒng)的對稱加密算法如 des 雖然可以快速的加密和解密明文,然而其密鑰難以分配和管理。如果讓通信雙方相互約定密鑰顯然是不合適的,因此最好的方式是由一方產(chǎn)生密鑰然后傳送給另一方。基于公鑰的非對稱加密體制的引入正是用于解決對稱加密算法在密鑰管理上的不足,但是非對稱加密算法如 rsa存在運(yùn)算強(qiáng)度過大、費(fèi)時較長等問題。如果直接用于加密聊天程序,其生成密鑰和加密解密所需時間是人們在通信過程中所不能容忍的,采取將兩種加密算法相結(jié)合的方式可以很好的解決以上

11、問題,從而達(dá)到安全快速的加密數(shù)據(jù)。第 2 頁 共 30 頁2 2所采用技術(shù)的先進(jìn)性分析所采用技術(shù)的先進(jìn)性分析2.12.1 desdes 算法算法des 是 data encryption standard(數(shù)據(jù)加密標(biāo)準(zhǔn))的縮寫。它是由 ibm公司研制的一種加密算法,美國國家標(biāo)準(zhǔn)局于 1977 年公布把它作為非機(jī)要部門使用的數(shù)據(jù)加密標(biāo)準(zhǔn),二十年來,它一直活躍在國際保密通信的舞臺上,扮演了十分重要的角色。des 是一個分組加密算法,它以 64 位為分組對數(shù)據(jù)加密。同時 des 也是一個對稱算法:加密和解密用的是同一個算法。它的密鑰長度是 56 位(因?yàn)槊總€第 8 位都用作奇偶校驗(yàn)),密鑰也可以是任

12、意的 56 位數(shù),而且可以任意時候改變。其中有極少量的數(shù)被認(rèn)為是弱密鑰,但是很容易避開它們。所以保密性依賴于密鑰。2.22.2 rsarsa 算法算法1978 年,美國麻省理工學(xué)院(mit)的研究小組成員 ronald l rivest、adi shamir、 leonard adleman 提出了一種基于公開密鑰密碼體制的優(yōu)秀加密算法rsa 算法。rsa 的取名就是來自這三位發(fā)明者姓氏的第一個字母。該算法以其較高的保密強(qiáng)度逐漸成為一種廣為接受的公鑰密碼體制算法。rsa 算法是一種分組密碼體制算法,它的保密強(qiáng)度是建立在具有大素數(shù)因子的合數(shù),其因子分解 np(nondeterministic p

13、olynomial)完全問題這一數(shù)學(xué)難題的基礎(chǔ)上的,因此 rsa 算法具有很強(qiáng)的保密性。rsa 算法研制的最初目標(biāo)是解決 des 算法秘密密鑰利用公開信道傳輸分發(fā)困難的難題,而實(shí)際結(jié)果不但很好地解決了這個難題;還可利用 rsa 來完成對消息的數(shù)字簽名以防對消息的抵賴;同時還可以利用數(shù)字簽名發(fā)現(xiàn)攻擊者對消息的非法篡改,以保護(hù)數(shù)據(jù)信息的完整性。rsa 算法是第一個能同時用于加密和數(shù)字簽名的算法,也易于理解和操作。rsa 是被研究得最廣泛的公鑰算法,普遍認(rèn)為是目前最優(yōu)秀的公鑰方案之一。rsa 得到了世界上的最廣泛的應(yīng)用,并于 1992 年 iso 國際標(biāo)準(zhǔn)化組織在其頒發(fā)的國際標(biāo)準(zhǔn) x.509 中,將

14、 rsa 算法正式納入國際標(biāo)準(zhǔn)。2.32.3 線程池線程池在傳統(tǒng)的 unix 模型中,當(dāng)一個進(jìn)程需要另一個實(shí)體來完成某事時,它就fork 一個子進(jìn)程并讓子進(jìn)程去執(zhí)行處理。unix 上的大多數(shù)網(wǎng)絡(luò)服務(wù)器程序就是這么編寫的,父進(jìn)程 accept 一個連接,fork 一個子進(jìn)程,該子進(jìn)程處理與該連接對端的客戶之間的通信。盡管這種范式多少年來一直良好地服務(wù)著,fork 調(diào)用卻存在一些問題:1 fork 是昂貴的。fork 要把父進(jìn)程的內(nèi)存映象拷貝到子進(jìn)程,并在子進(jìn)程中復(fù)制第 3 頁 共 30 頁所有描述字,如此等等。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ù)空間及所有描述字的一個拷貝開始運(yùn)行。然而從子進(jìn)程往父進(jìn)程返回信息卻比較費(fèi)力。線程有助于解決這兩個問題。線程有時稱為輕權(quán)進(jìn)程(lightweight process) ,因?yàn)榫€程比進(jìn)程“權(quán)重輕些” 。也就是說,線程的創(chuàng)建可能比進(jìn)程的創(chuàng)建快 10100 倍。線程池是指在服務(wù)器啟動階段預(yù)先創(chuàng)建一系列線程阻塞于 accept 調(diào)用,每個客戶由當(dāng)前可用線程池中的某個(閑置)線程處理。這種處理方式比通常的客戶連接到來時臨時創(chuàng)建線程為其服務(wù)要快得多??梢垣@得很好的性能加速。3 3系統(tǒng)需求分析系統(tǒng)需求分析3.13.1 聊天程序功能分析聊天程

16、序功能分析1 注冊功能通常聊天程序需要用戶名和密碼才能使用,所以需要實(shí)現(xiàn) web 注冊功能,這樣用戶可以很方便的通過 web 網(wǎng)站注冊自己的用戶名并取得密碼,還可以在服務(wù)器上存儲個人相關(guān)信息以便他人查看。2 登陸功能用戶在聊天之前需要輸入用戶名和密碼進(jìn)行登陸以便獲取自身相關(guān)信息和好友相關(guān)信息,故登陸過程中服務(wù)器需對用戶名和密碼進(jìn)行必要的核對。3 聊天功能這是聊天程序的主要功能。用戶之間的相互通信必須及時快速的由服務(wù)器轉(zhuǎn)發(fā)。3.23.2 加密算法加密算法由于是加密聊天程序,故對聊天明文的加密算法應(yīng)選取加密速度相對較快的對稱加密算法(如:des) ,又由于 des 的加密密鑰是不能公開的秘密密鑰,

17、故對 des 的密鑰應(yīng)加密傳送,所以應(yīng)采用非對稱的公鑰加密算法(如 rsa)用以分發(fā) des 密鑰。des 加密算法:作為對稱加密算法中的 des 加密算法由于其加密過程是固定不變的,故應(yīng)考慮其密鑰的生成。由于弱密鑰存在的可能性,還應(yīng)該考慮如何避免生成弱密鑰。因?yàn)椴罘址治龇ǖ奶岢隹梢钥焖俚钠平馍儆?16 輪迭代的 des 算法,故應(yīng)保證其迭代次數(shù)至少為 16 輪。rsa 加密算法:由于 rsa 是基于大素數(shù)因子分解這一數(shù)學(xué)難題提出的,故 rsa 中公鑰和私第 4 頁 共 30 頁鑰的產(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 用戶通過 web 應(yīng)用程序注冊帳號,然后用注冊的帳號登陸聊天程序服務(wù)器。2 客戶端產(chǎn)生生成 des 密鑰,服務(wù)器端在啟動時初始化產(chǎn)生 rsa 公鑰和私鑰。當(dāng)客戶端向服務(wù)器發(fā)起連接時,服務(wù)器送出 rsa 公鑰,客戶端用取得的公鑰加密產(chǎn)生的 des 私鑰回傳服務(wù)器。3 最后服務(wù)器與客戶端雙方的通信均由 des 加密算法加密通信明文。4.24.2 模塊劃分模塊劃分4.2.14.2.1 desdes 算法模塊算法模塊1 加密算法 3 個主要步驟第一步,初始置換 ip第 5 頁 共 30

19、頁圖 2 初始置換表 ip圖 2 為初始置換表 ip,64bit 輸入明文經(jīng)過該表完成初始置換。第二步,16 輪迭代圖 3 16 輪迭代圖 3 為 des16 輪迭代,將經(jīng)過初始置換的數(shù)據(jù)分成 li 和 ri 兩部分。將 ri直接交換為 li+1,li 與 ri 經(jīng)過 f 函數(shù)處理后的數(shù)據(jù)相異或得 ri+1,最后一輪不做交換。第三步,逆置換第 6 頁 共 30 頁圖 4 逆置換表(ip-1)圖 4 為逆置換表(ip-1),經(jīng)過 16 輪迭代后通過該表置換得到輸出的密文。2 子密鑰的產(chǎn)生圖 5 生成子密鑰圖 5 為子密鑰生成過程,將 64bit 初始密鑰經(jīng)過 pc-1 表置換為 56bit 輸入

20、,分為 ci, di 兩組分別進(jìn)行 ls 循環(huán)左移,再經(jīng)過 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 為從對應(yīng)的內(nèi)外循環(huán)位之和(i + j

21、)對應(yīng)的結(jié)果位上取得的值。r(i + j)暫時存入第 7 頁 共 30 頁對應(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)算對應(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 依次通過 miller-rabin

23、素性測試。miller-rabin 素性測試:先計(jì)算出 m、j,使得 n-1=m*2j,其中 m 是正奇數(shù),j 是非負(fù)整數(shù),隨機(jī)取一個 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)過程中將前一步中的 r 代入下一步中合并后可求得逆元 x。4.2.34.2.3 聊天程序模塊聊天程序模塊1、數(shù)據(jù)庫設(shè)計(jì)用戶信息表 user_infor (存儲注冊用戶的信息)create table user_info第 8 頁 共 30 頁(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; #指定存儲引擎好友關(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 頁 共 30 頁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 注冊頁面模塊用戶管理:用于管理用戶的注冊和登陸。添加好友:查詢數(shù)據(jù)庫中注冊用戶,選擇要添加的好友插入數(shù)據(jù)庫。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); /逆置換/加密過程=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 頁 共 30 頁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)過 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 比特數(shù)據(jù)合為 56 比特數(shù)據(jù)if (j 28)cidij = cij;elsecidij = dij - 28;ki = pc_2_permute (cidi); /存入子密鑰數(shù)組第 11 頁 共 30 頁加密算法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 頁 共 30 頁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); /絕對值相加bignum abssub (bignum, bignum); /絕對值相減bignum operator + (bignum); /加號重載bignum operator - (bignum); /減號重載bignum operator * (bignum); /乘號重載bignum operator / (bignum); /除號重載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 頁 共 30 頁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; /乘方對 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), 對式子 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 頁 共 30 頁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 素性測試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 通過以 b 為基的 miller-rabin 測試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 頁 共 30 頁v = modexp (b, m, n);if (v = one) /若 b 的 m 次方對 n 取余等于 1 通過測試return (true);bignum i (0, 1, 0);while (i j)if (v = (n - one) /滿足 b(2j)m = (

41、n - 1) (mod n),測試結(jié)束return (true);v = v.square () % n;i = i + one;return (false);5.35.3 webweb 注冊頁面核心代碼注冊頁面核心代碼用戶管理?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á)式檢測輸入名字的合法性if ($in_user_name = or !ereg (:alnum:_-1,50, $in_user_name)return false;elsereturn true;第 16 頁 共 30 頁public function isvalidpassword ($in_passwd) /檢測輸入密碼的合法性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ù)庫if (!$this-isvalidusername ($in_uname) /檢查用戶名是否正確,如果錯誤給出相應(yīng)錯誤提示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) /檢查密碼是否正確,如果錯誤給出相應(yīng)錯誤提示echo errorthe password is not right or the length is too long!the page will go back after 2 seconds.error;exit;第 17 頁 共 30 頁$conn = $this-getconnection (); /創(chuàng)建到數(shù)據(jù)庫的連接$conn-autocommit (false); /關(guān)閉自動提交至數(shù)據(jù)庫為事務(wù)處理狀態(tài)$qstr = query ($qstr); /執(zhí)行查詢語句if ($result1 =

45、 false)$conn-rollback (); /出錯后事務(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ù)庫連接return $user_id; /返回用戶賬號public function userlogin

46、($user_id, $in_password) /處理用戶登錄$conn = $this-getconnection (); /連接數(shù)據(jù)庫$check = query ($check); /執(zhí)行查詢語句if ($result = false)echo select user_info false! message: .$conn-error;第 18 頁 共 30 頁exit;if ($row = $result-fetch_assoc () = null) /檢查登陸用戶信息是否正確,如果錯誤返回 false$conn-close ();return false;$conn-close (

47、);return $row;private function getconnection () /連接數(shù)據(jù)庫$conn = new mysqli (localhost, andy, andy2000, freechat);if (mysqli_connect_errno () != 0)$errno = mysqli_connect_errno (); /獲取數(shù)據(jù)庫連接錯誤號$errmsg = mysqli_connect_error (); /獲取數(shù)據(jù)庫連接錯誤信息echo connect database failed with: ($errno) $errmsg.;exit;return

48、 $conn;?第 19 頁 共 30 頁5.45.4 服務(wù)器端核心代碼服務(wù)器端核心代碼圖 6 服務(wù)器完成初始化圖 6 為服務(wù)器初始化過程和為已登錄用戶服務(wù)的過程。服務(wù)器先生成 rsa算法所需的公鑰和私鑰,當(dāng)連接到來時服務(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 頁 共 30 頁cerr

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論