◆李玉廣 余慶豐
(61764部隊 海南 572000)
基于Java的加密通信平臺設(shè)計
◆李玉廣 余慶豐
(61764部隊 海南 572000)
本文針對信息安全問題日益突出的現(xiàn)狀,設(shè)計了一種基于Java的加密通信平臺。該平臺利用RSA、DES以及AES等加密算法對短消息通信和文件傳輸進(jìn)行加密,保證數(shù)據(jù)的保密性;同時,具有文件簽名認(rèn)證功能。多種加密算法的結(jié)合,較好地保證了信息傳輸?shù)陌踩院屯暾浴?/p>
加密通信;加密算法;信息傳輸
信息作為一種資源,具有普遍性、共享性、增值性、可處理性以及多效用性等特征,使其對于人類具有特別重要的意義[1]。信息安全的概念在二十世紀(jì)經(jīng)歷了一個漫長的歷史階段,90年代以來得到了深化[2]。進(jìn)入21世紀(jì),隨著計算機技術(shù)的發(fā)展,信息安全的重要性不斷凸顯。信息安全的實質(zhì)就是保護(hù)信息系統(tǒng)或信息網(wǎng)絡(luò)中的信息資源免受各種類型的威脅、干擾以及破壞[3]。目前主要通過加密方法對信息進(jìn)行處理,達(dá)到保證信息的保密性和完整性的目的[4]。
數(shù)據(jù)在存儲、處理和交換等環(huán)節(jié)中,都存在泄密、截收、竊聽、竄改以及偽造的可能性[4]。通過對多種加密算法的分析和研究,實現(xiàn)了集成化的加密通信平臺,以滿足數(shù)據(jù)保密性和完整性的客觀需求。
在本設(shè)計中,主要完成基于socket的點對點通信及文件傳輸、對稱和非對稱通信加密、對稱和非對稱文件傳輸加密、文件簽名認(rèn)證等內(nèi)容。
1.1 方案設(shè)計

圖1 主要模塊關(guān)系結(jié)構(gòu)
主要模塊的層次關(guān)系如圖1所示,各模塊的主要功能:
(1)trans.cipher:負(fù)責(zé)實現(xiàn)加解密相關(guān)的功能,具體來說即實現(xiàn)AES,DES,RSA三種加解密算法,向外提供相關(guān)API。
(2)trans.control:通過調(diào)用trans.cipher,trans.config,trans.control,trans.thread,trans.util的相關(guān)API,負(fù)責(zé)軟件的主要業(yè)務(wù)邏輯,響應(yīng)trans.view所捕獲的界面用戶操作。
(3)trans.thread:負(fù)責(zé)實現(xiàn)用于socket通信的監(jiān)聽線程和連接線程。
(4)trans.util:負(fù)責(zé)向其他包提供常用基礎(chǔ)功能,如字節(jié)數(shù)組操作。
(5)trans.view:負(fù)責(zé)軟件界面結(jié)構(gòu)布局及用戶輸入響應(yīng)。
1.2 關(guān)鍵模塊實現(xiàn)
(1)trans.cipher.AsymEncryptor負(fù)責(zé)實現(xiàn)非對稱加解密功能,主要方法說明:
①encrypt/decrypt/sign/authenticate,實現(xiàn)對byte數(shù)組的加解密、簽名認(rèn)證功能。
②getPubkey/getPrivkey,從密鑰中獲取密鑰。
(2)trans.cipher.SymEncryptor負(fù)責(zé)實現(xiàn)對稱加解密功能。
(3)trans.thread.ConnectionThread.run是連接線程的具體實現(xiàn),該線程既負(fù)責(zé)響應(yīng)來自用戶的輸入事件也負(fù)責(zé)不斷的從socket中讀取數(shù)據(jù)。
(4)trans.control.MainControl.doSendFile主要負(fù)責(zé)通過socket來傳輸一個文件,傳輸時先對文件進(jìn)行相應(yīng)的加密操作。文件的簽名發(fā)送與此類似,不再重復(fù)。
(5)Trans.util.ByteArrayUtil為實現(xiàn)基于socket的文件傳輸,通過在字節(jié)流前加入特定標(biāo)識的方式來區(qū)分文件和普通消息。然而,實現(xiàn)這樣的設(shè)計前提是對字節(jié)數(shù)組進(jìn)行靈活的前綴添加,子序列查找等操作。為此實現(xiàn)了ByteArrayUtil類來支持此類功能。在該類的方法中,值得一提的是字節(jié)數(shù)組中子序列查找的算法,為了提高效率,在此運用了KMP匹配算法。
1.3 程序運行
用eclipse中的打包工具將程序打包為可運行的JAR文件。安裝java虛擬機,版本至少為1.6以上,雙擊sec.jar即可執(zhí)行程序。
主要包括用戶登錄及建立連接,設(shè)置加密方式,傳輸消息或文件,設(shè)置解密方式,解密消息或文件,RSA密鑰管理,RSA簽名認(rèn)證等環(huán)節(jié)。

圖2 登錄角色選擇
2.1 用戶登錄及建立連接
(1)輸入用戶名,進(jìn)行登錄并選擇角色(服務(wù)端或客戶端)。
(2)服務(wù)端指定監(jiān)聽端口進(jìn)行監(jiān)聽。客戶端指定服務(wù)端的IP地址和端口號來建立連接。

圖3 登錄參數(shù)設(shè)置
2.2 設(shè)置加密方式及密鑰
(1)在通信窗口中選擇“Settings” — “Encrypt”—“AES”或“D ES”,之后在彈出的窗口中輸入密鑰,其中AES密鑰為16位,D ES為8位。
(2)如果是RSA加密方式,在通信窗口中選擇“Settings”—“E ncrypt”—“RSA”,按提示指定對方公鑰文件所在位置。
2.3 消息和文件通信
(1)建立連接后,出現(xiàn)通信窗口,可以通過send按鈕進(jìn)行消息通信,如果沒有選擇加解密方式則進(jìn)行明文通信,否則按照相應(yīng)的方式進(jìn)行加解密。
(2)建立連接后,可在通信窗口中選擇“File”—“Encrypt a f ile and send”將一個文件按指定好的加密方式進(jìn)行加密傳輸,如果未指定加密方式則傳輸明文文件。接收方接收到文件時會彈出提示窗口,點擊receive將文件保存到本地。
2.4 設(shè)置解密方式
(1)如果是AES或DES解密,在通信窗口中選擇“Settings”—“Decrypt”—“AES”或”DES”,并輸入密鑰。
(2)如果是RSA解密,選擇“Settings”—“Decrypt”—“RSA”,按提示指定自己的私鑰文件。選中消息密文,點擊decrypt按鈕可將解密該消息。
2.5 解密消息或文件
(1)對消息進(jìn)行解密須選中接收到的加密消息,點擊decryp t按鈕即可顯示明文,如圖4所示。

圖4 解密消息
(2)對文件進(jìn)行解密選擇“File”—“Decrypt a file and save As”,指定原加密文件以及明文文件存放地址即可,如圖5所示。

圖5 解密文件
2.6 RSA密鑰管理
(1)生成RSA密鑰對
如果用戶尚沒有密鑰文件,選擇“RSA Key Manager”—“Ge nerate Key Pair”,生成密鑰對后通過“Save Public”和“Save Privat e”來保存相應(yīng)的密鑰文件,如圖6所示。

圖6 生成RSA密鑰對
(2)發(fā)送RSA公鑰文件
生成自己的RSA密鑰對后,應(yīng)將公鑰文件發(fā)送給對方。選擇“File”—“Send my Public Key File”,發(fā)送自己的公鑰文件。這時對方會收到文件到達(dá)通知,點擊receive進(jìn)行接收并存放到本地。
2.7 RSA文件簽名認(rèn)證
(1)設(shè)置己方私鑰
選擇“Settings” —“Sign/Authenticate ”— “Set my private key”指定己方的私鑰文件。
(2)文件簽名并傳輸
設(shè)置好私鑰后,選擇“File”—“Sign a File and Send”來對一個文件進(jìn)行簽名并發(fā)送。
(3)設(shè)置對方公鑰
選擇“Settings” —“Sign/Authenticate ”—“Set Your Public key”指定對方的公鑰文件。
(4)文件認(rèn)證并傳輸
設(shè)置好私鑰后,選擇“File”—“Authenticate a File and Save As”來對一個文件進(jìn)行認(rèn)證并另存。
3.1 測試環(huán)境
操作系統(tǒng):Windows XP SP3 32位。Java虛擬機版本:1.6.21
加解密相關(guān)jar包:javax.crypto.*
3.2 功能測試
(1)消息加密傳輸與解密(DES算法)
發(fā)送方Bob設(shè)定加密方式為DES,密鑰“12345678”,將消息“THIS IS ENCRYPTED”加密后發(fā)送。接收方Alice設(shè)定解密方式為DES,密鑰“12345678”,將收到的密文進(jìn)行解密,得到正確的明文,如圖7所示。

圖7 消息加密傳輸與解密
(2)密鑰對生成與公鑰的傳輸
雙方先通過RSA密鑰管理生成各自的密鑰對,并分別將自己的公鑰發(fā)送給對方。密鑰生成和公鑰的發(fā)送接收過程都能正確完成,如圖8所示。

圖8 密鑰對生成與公鑰的傳輸
(3)文件加密傳輸與解密(RSA算法)
在應(yīng)用場景2的基礎(chǔ)上,Alice選擇加密類型為RSA并指定Bob的公鑰文件,選擇文件1.txt進(jìn)行加密發(fā)送,Bob能正確接收到加密后的1.txt。Bob設(shè)置解密類型為RSA并指定自己的私鑰,對1.txt進(jìn)行解密能得到正確的明文文件,如圖9所示。