国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于C#的計(jì)算機(jī)網(wǎng)絡(luò)加密技術(shù)實(shí)驗(yàn)案例研究

2020-02-03 02:37王磊楊青文張立立
電子技術(shù)與軟件工程 2020年19期
關(guān)鍵詞:加解密客戶機(jī)私鑰

王磊 楊青文 張立立

(東北大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院 遼寧省沈陽市 110819)

學(xué)習(xí)使用Visual Studio 等開發(fā)工具,掌握基于Socket 的TCP通信以及常用的加密算法,熟悉應(yīng)用軟件的開發(fā)過程。

要求學(xué)生使用C#等語言以及相關(guān)的開發(fā)工具,進(jìn)行一次網(wǎng)絡(luò)通信軟件的開發(fā),要求具有信息加密功能以及密鑰管理功能。要求軟件界面美觀,操作簡便,符合網(wǎng)絡(luò)通信的實(shí)際場景。

基于以上基本教學(xué)要求,本文給出了一種基于加密聊天軟件的設(shè)計(jì)方案,基于AES 算法對聊天內(nèi)容進(jìn)行加密,并通過RSA 算法進(jìn)行密鑰分發(fā),基于TCP 協(xié)議的Scoket 編程實(shí)現(xiàn)聊天信息的傳輸。

1 系統(tǒng)需求及總體設(shè)計(jì)

1.1 系統(tǒng)需求分析

為滿足需求,軟件應(yīng)具有基本的聊天功能和數(shù)據(jù)加密功能。

基本聊天功能:用戶可以設(shè)定昵稱,在連接服務(wù)器以后,可以看到其他在線用戶,可以選擇群聊和私聊兩種聊天方式進(jìn)行聊天。

數(shù)據(jù)加密功能:能夠在發(fā)送端對聊天內(nèi)容進(jìn)行加密,在接收端進(jìn)行解密,為確保安全,每次登錄服務(wù)器后可以隨機(jī)生成新的密鑰,并且密鑰可以通過一種安全的方式在用戶之間傳遞。

另外,軟件應(yīng)具有簡潔、美觀的操作界面;系統(tǒng)可自行完成復(fù)雜的加密、解密過程,無需用戶進(jìn)行繁雜的操作;軟件響應(yīng)時(shí)間不超過5 秒。

1.2 系統(tǒng)總體設(shè)計(jì)

系統(tǒng)包括服務(wù)器端和客戶機(jī)端兩個(gè)部分,客戶機(jī)通過與服務(wù)器連接實(shí)現(xiàn)相互通信。系統(tǒng)總體包括三個(gè)部分:網(wǎng)絡(luò)通信、聊天信息加密、密鑰分發(fā)。

圖1:Socket 通信流程

圖2:AES 加解密過程

圖3:RSA 算法加解密過程

圖4:服務(wù)器端界面

圖5:客戶機(jī)端完整界面

1.2.1 網(wǎng)絡(luò)通信

如圖1所示,在網(wǎng)絡(luò)通信部分,采用基于Socket 套接字的TCP 通信,主要流程如下:

(1)首先在服務(wù)器端創(chuàng)建一個(gè)套接字,通過bind()函數(shù)綁定在一個(gè)本地地址和端口上;

(2)服務(wù)器啟動(dòng)listen()函數(shù)持續(xù)進(jìn)行監(jiān)聽;

(3)客戶端同樣創(chuàng)建一個(gè)套接字,然后通過connect()函數(shù)向服務(wù)器發(fā)起連接請求;

(4)服務(wù)器監(jiān)聽到客戶端的連接請求后,調(diào)用accept()函數(shù)接收請求,建立連接,同時(shí)為客戶機(jī)創(chuàng)建一個(gè)新的套接字進(jìn)行通信;

(5)建立連接后,雙方可以通過read(),write()等函數(shù)進(jìn)行數(shù)據(jù)的傳輸;

(6)服務(wù)結(jié)束時(shí),客戶端調(diào)用close()函數(shù)關(guān)閉套接字,服務(wù)器繼續(xù)進(jìn)行監(jiān)聽,直至調(diào)用close()關(guān)閉服務(wù)。

1.2.2 聊天信息加密

聊天信息采用AES 加密算法進(jìn)行加密。AES 是一種對稱加密算法,即加密和解密使用相同的密鑰。AES 是一種加密標(biāo)準(zhǔn),其包括多種模式,如ECB、CBC、CFB、OFB,等。其中,CBC(Cipher Block Chaining,密碼分組鏈接)模式采用循環(huán)的方式,將前一個(gè)分組的密文和當(dāng)前分組的明文異或操作后再加密,增強(qiáng)了破解難度。本文采用256 位AES 標(biāo)準(zhǔn)的CBC 模式進(jìn)行聊天信息的加密,共加密14 輪,每一輪的主要流程包括輪密鑰加、字節(jié)代換、行移位和列混合操作。

圖2 為AES 加解密的流程,其中W 代表擴(kuò)展后的密鑰,為一個(gè)字節(jié)矩陣。

在執(zhí)行每一輪操作前,需要將明文轉(zhuǎn)換為狀態(tài)矩陣,即將明文按AES 標(biāo)準(zhǔn)的字節(jié)大小進(jìn)行分組,然后將其用以字節(jié)為單位的正方形矩陣描述。下面簡單介紹一下每一輪加密中的四個(gè)操作。

字節(jié)代換:一個(gè)簡單的查表操作,將狀態(tài)矩陣中的元素按照一定規(guī)則映射為AES 定義的S 盒中的值。

行移位:將狀態(tài)矩陣中的值進(jìn)行左循環(huán)移位操作,第一行不進(jìn)行移位,第二行向左移一位,以此類推。

列混合:將移位后的狀態(tài)矩陣與固定的矩陣相乘,得到混淆的狀態(tài)矩陣,其中,乘法和加法都是定義在基于GF(2^8)上的二元運(yùn)算。在最后一輪操作時(shí)不進(jìn)行列混合。輪密鑰加:將密鑰同狀態(tài)矩陣中的數(shù)據(jù)進(jìn)行逐位異或操作。AES 的解密過程即加密過程的反操作,如圖2所示。

1.2.3 密鑰分發(fā)

密鑰分發(fā)采用RSA 加密算法。RSA 是一種非對稱加密算法,即加解密使用的密鑰是不同的。這種加密方式是用數(shù)學(xué)上的難解問題構(gòu)造的,通常加密解密的速度比較慢,適合偶爾發(fā)送數(shù)據(jù)的場合。其優(yōu)點(diǎn)是密鑰傳輸方便,而且可以用于傳遞AES 的密鑰。

RSA 算法采用一對公鑰和私鑰進(jìn)行加解密,如圖3所示。假設(shè)發(fā)送方向接收方發(fā)送消息(明文),加解密基本步驟如下:

(1)接收方生成公鑰和私鑰,公鑰公開,私鑰保留;

(2)發(fā)送方將要發(fā)送的消息采用公鑰加密,得到密文,然后將密文發(fā)送給接收方;

(3)接收方收到密文后,用自己的私鑰進(jìn)行解密,獲得明文。

本文設(shè)計(jì)的加密聊天軟件使用AES算法對聊天信息進(jìn)行加密,用戶每次聊天時(shí)都會(huì)隨機(jī)生成32 位數(shù)字的AES 密鑰。如果某個(gè)用戶甲想要向用戶乙發(fā)消息,首先甲需要再本地生成一對RSA 公鑰和私鑰,然后將公鑰傳給乙;乙用甲的公鑰將自己的AES 密鑰加密后再傳回用戶甲;甲用自己的私鑰進(jìn)行解密,獲得乙的AES 密鑰,即可向乙發(fā)送加密消息。同樣地,如果乙想要向甲發(fā)送消息,也要執(zhí)行一樣的操作。

圖6:用戶連接到服務(wù)器

圖7:群聊方式下獲取密鑰

圖8:私聊方式下加密聊天

為解決操作繁瑣的問題,使系統(tǒng)自動(dòng)完成密鑰傳遞和加解密功能,對聊天信息添加標(biāo)識(shí)符,使系統(tǒng)可以自動(dòng)識(shí)別不同的消息并進(jìn)行相應(yīng)的處理。使用的標(biāo)識(shí)符包括“PUKEY”,“PRKEY”,“PU-CIPHER”,“PR-CIPHER”,分別代表群聊公鑰、私聊公鑰、群聊密鑰和私聊密鑰。在收到公鑰消息后,系統(tǒng)會(huì)使用該公鑰對本地AES 密鑰進(jìn)行加密,并將其返回;密鑰消息傳輸?shù)氖羌用芎蟮拿荑€,在收到此類后,系統(tǒng)使用本地私鑰對其進(jìn)行解密,并使用得到的密鑰進(jìn)行AES 加密通信。

2 系統(tǒng)詳細(xì)設(shè)計(jì)及方案

下面對服務(wù)器端和客戶機(jī)端各個(gè)模塊的具體設(shè)計(jì)方案進(jìn)行詳細(xì)描述。

2.1 服務(wù)器端

服務(wù)器端界面設(shè)計(jì)相對簡單,只需顯示端口號、在線用戶、群聊密鑰。服務(wù)器可以選擇一個(gè)端口號啟動(dòng),在啟動(dòng)以后,會(huì)隨機(jī)生成AES 密鑰,用于用戶之間群聊。當(dāng)有用戶連接到服務(wù)器時(shí),服務(wù)器會(huì)進(jìn)行記錄,并實(shí)時(shí)顯示在線用戶,如圖4所示。

2.2 客戶機(jī)端

客戶機(jī)端是用戶進(jìn)行聊天操作的界面,包括用戶信息、在線用戶列表、聊天記錄、信息發(fā)送模塊,以及密鑰管理模塊和信息加解密模塊。

用戶信息模塊是用戶連接服務(wù)器的功能模塊,需要輸入的信息包括用戶昵稱、服務(wù)器的IP 地址和端口號。

連接服務(wù)器以后,從服務(wù)器獲取在線用戶列表。用戶可以選擇群聊或私聊,當(dāng)選擇群聊時(shí),可以從服務(wù)器獲取群聊密鑰;當(dāng)選擇私聊時(shí),可以從在線用戶列表中選擇一名用戶,交換聊天密鑰,向?qū)Ψ桨l(fā)送加密消息。

為展示出聊天內(nèi)容加密以及密鑰管理的過程,將聊天密鑰以及密鑰管理模塊一并顯示在界面中(實(shí)際應(yīng)用場景下,用戶并不需要知道加解密和密鑰管理的工作過程)。不管是群聊還是私聊,都需要先獲取聊天密鑰。如果是群聊,密鑰由服務(wù)器隨機(jī)升成,并通過RSA 公鑰加密后發(fā)給用戶;如果是私聊,每個(gè)人的加密密鑰均不同,因此需要獲取對方的密鑰,同樣采用RSA 算法進(jìn)行密鑰的加密與分發(fā)。當(dāng)獲取密鑰時(shí),RSA 算法生成的公鑰和私鑰將顯示在密鑰管理模塊中,聊天使用的AES 密鑰將顯示在信息加解密模塊中。

用戶在獲取密鑰時(shí),無需知道密鑰是如何生成以及如何進(jìn)行分發(fā)的;在獲取密鑰之后,直接輸入文本消息發(fā)送即可,也無需知道對信息進(jìn)行加解密的過程,整個(gè)過程均由系統(tǒng)自動(dòng)完成??蛻魴C(jī)端的完整界面如圖5所示。

3 系統(tǒng)測試

系統(tǒng)開發(fā)使用的軟件為Visual Stuio 2015,使用語言為C#。系統(tǒng)測試項(xiàng)目包括:服務(wù)器啟動(dòng)和用戶登錄,群聊模式下密鑰的生成與分發(fā),群聊模式下聊天信息的加密傳輸,私聊模式下密鑰的生成與分發(fā),私聊模式下聊天信息的加密傳輸。

以下是測試過程及結(jié)果:

(1)用戶登錄及服務(wù)器啟動(dòng),如圖6所示。

輸入端口號后點(diǎn)擊確定啟動(dòng)服務(wù)器,然后打開客戶機(jī),輸入信息后連接服務(wù)器,服務(wù)器上和客戶機(jī)上均可動(dòng)態(tài)顯示在線用戶。

(2)群聊模式。

用戶選擇聊天方式為“群聊”,點(diǎn)擊“一鍵獲取密鑰”按鈕,密鑰管理模塊生成公鑰和私鑰,服務(wù)器端生成32 位數(shù)字密鑰,同時(shí)客戶機(jī)端“群聊密鑰”處顯示出從服務(wù)器獲取的密鑰,彈出“收到密鑰”窗口。如圖7 為群聊方式下獲取密鑰界面。

輸入聊天內(nèi)容并點(diǎn)擊發(fā)送,群聊的所有用戶均可收到消息,右下角的密文框中顯示的是收到的密文,聊天記錄中顯示的是解密后的消息。說明已成功進(jìn)行了消息的傳輸和加解密。

(3)私聊模式。

選擇“私聊”模式,選擇一個(gè)用戶進(jìn)行私聊,點(diǎn)擊“一鍵獲取密鑰”按鈕后,顯示“收到密鑰”,顯示的密鑰與該用戶的密鑰一致。如圖8所示為私聊方式下加密聊天。

同時(shí),在對方的密鑰管理模塊,可以看到“對方公鑰”處獲取到加密AES 密鑰的公鑰。在互相獲取密鑰后,兩個(gè)用戶分別相對方發(fā)送消息,雙方均可以收到密文并將其解密顯示在聊天記錄中。

4 結(jié)束語

本文給出了使用RSA 進(jìn)行密鑰管理的AES 加密聊天軟件的設(shè)計(jì)方案,詳細(xì)介紹了系統(tǒng)各部分的功能原理、運(yùn)行流程以及具體的實(shí)現(xiàn)方案,最后對系統(tǒng)各個(gè)功能進(jìn)行測試。本設(shè)計(jì)重在基礎(chǔ)教學(xué),鞏固學(xué)生對理論知識(shí)的理解,鍛煉軟件開發(fā)的能力,提高其系統(tǒng)設(shè)計(jì)能力與邏輯思維能力。

猜你喜歡
加解密客戶機(jī)私鑰
清掃機(jī)器人避障系統(tǒng)區(qū)塊鏈私鑰分片存儲(chǔ)方法
比特幣的安全性到底有多高
基于改進(jìn)ECC 算法的網(wǎng)絡(luò)信息私鑰變換優(yōu)化方法
一種基于虛擬私鑰的OpenSSL與CSP交互方案
PDF中隱私數(shù)據(jù)的保護(hù)方法
電子取證中常見數(shù)據(jù)加解密理論與方法研究
基于FPGA的LFSR異步加解密系統(tǒng)
瘦客戶機(jī):安全與便捷的選擇
升騰瘦客戶機(jī)借神碼翱翔“云端”
基于Web數(shù)據(jù)提高訪問速度的方法
高唐县| 句容市| 南平市| 长泰县| 双江| 清新县| 九江市| 兰州市| 湖口县| 琼结县| 麻城市| 建水县| 桃园县| 凌海市| 上饶市| 玉山县| 进贤县| 瑞安市| 滨海县| 张家港市| 丹阳市| 北票市| 涞水县| 禄丰县| 谷城县| 长海县| 兴仁县| 繁昌县| 富川| 中牟县| 秀山| 绥中县| 获嘉县| 高清| 云和县| 墨竹工卡县| 始兴县| 望都县| 阿克苏市| 郎溪县| 葫芦岛市|