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

?

基于JAVA的簡單Socket通信

2020-08-04 09:49:21孫炳潤馬剛
科學導報·學術(shù) 2020年35期
關(guān)鍵詞:數(shù)字簽名

孫炳潤 馬剛

摘? 要:隨著信息技術(shù)的飛速發(fā)展,Socket的數(shù)據(jù)傳輸安全技術(shù)成為近幾年的熱點研究問題,為了實現(xiàn)網(wǎng)絡數(shù)據(jù)傳輸安全技術(shù)的功能,必須充分利用Socket通信的自身優(yōu)勢,并結(jié)合Java語言的安全性特點來完成。本文分析了Java平臺下Socket數(shù)據(jù)傳輸安全的特點,研究了三種基于Socket數(shù)據(jù)傳輸安全技術(shù)。希望給后續(xù)研究提供一定的參考

關(guān)鍵詞:JAVA;傳輸安全;對象序列化;數(shù)字簽名;SSL

一、JAVASOCKET網(wǎng)絡通信編程的實現(xiàn)過程

1.1建立服務器端

(1)調(diào)用ServerSocket類,以某個端口號為參數(shù)創(chuàng)建一個ServerSocket實例,即是服務器端的服務程序在監(jiān)聽該指定端口的Socket。

(2)創(chuàng)建ServerSocket并保持監(jiān)聽狀態(tài),調(diào)用了ServerSocket對象的accept()方法,隨后接收來自客戶發(fā)送的Socket連接請求。在服務器程序監(jiān)聽Socket連接請求時,也可采用Java的多線程技術(shù),實現(xiàn)并發(fā)服務器連續(xù)監(jiān)聽連接請求。

(3)調(diào)用Socket對象的getInputStream和getOutputStream方法建立輸入流和輸出流,并進行封裝。不過在調(diào)用這兩個方法時可能會產(chǎn)生I/O異常,必須要去捕獲這個I/O異常。

(4)使用建立好的輸入輸出流對象的read和write方法完成和客戶端的數(shù)據(jù)傳輸,并把處理結(jié)果返回給客戶端。

(5)在服務器與客戶機雙方通訊結(jié)束以后,服務器端應該及時關(guān)閉輸入和輸出這兩個數(shù)據(jù)流。

1.2建立客戶端

(1)以服務器指定的IP地址或主機名以及服務器指定的端口號為參數(shù),調(diào)用Socket類的構(gòu)造方法,創(chuàng)建一個Socket對象。

(2)建立了客戶端通信的Socket后,就可以像服務器一樣使用Socket的getInputStream和getOutputStream方法來創(chuàng)建輸入流和輸出流。

(3)調(diào)用輸入流和輸出流對象相應的方法讀寫字節(jié)流或字符流數(shù)據(jù),完成雙方的通信任務。

(4)在客戶機與服務器雙方通訊結(jié)束以后,我們也要用字節(jié)流或字符流對象的close()方法來關(guān)閉用于網(wǎng)絡通信的輸入流和輸出流,再用Socket對象的close()方法來關(guān)閉Socket。

二、基于SOCKET數(shù)據(jù)傳輸?shù)陌踩夹g(shù)分析

2.1基于Socket的對象序列化的安全技術(shù)分析

(1)對象序列化的安全技術(shù)分析

對象一旦被序列化后,作為對象序列化結(jié)果的字節(jié)流可以讀取,也可以被任何能訪問該流的對象改變,這就允許任何對象訪問序列化對象的狀態(tài),因而違背了用戶所期望的隱私權(quán)。同時,用戶也可以任何方式改變流中的字節(jié),并允許重新構(gòu)造Java平臺下保護范圍內(nèi)從未創(chuàng)建的對象。

2.2基于SOCKET的數(shù)字簽名的安全技術(shù)分析

數(shù)字簽名的技術(shù)主要有DSA和RSA算法兩種,而DSA比RSA產(chǎn)生密鑰速度快,但它們的安全性差不多。其主要包括三個過程:一是生成公鑰和私鑰,其中公鑰可以對外公開,私鑰用于加密;二是簽名文件內(nèi)容,即將生成的密鑰對寫入或保存到文件中;三是發(fā)送簽名后的數(shù)據(jù)及公鑰,拿公鑰來檢驗數(shù)據(jù)文件中的數(shù)字簽名。

2.3基于SOCKET的SSL的安全技術(shù)分析

(1)安全套接層協(xié)議

a.客戶端向服務器端發(fā)起通信對話,協(xié)商傳送加密算法,準備進行安全的對話,并告之所用的對稱加密算法、密鑰交換算法、摘要算法等。

b.服務器收到請求后向客戶端發(fā)送服務器數(shù)字證書,并確定使用一種加密組合進行通信,為了證明確實是服務器端,必須發(fā)送服務器端的數(shù)字證書給客戶端,并且讓客戶端驗證服務器端的身份。

c.客戶端再向服務器端傳送本次對話的密鑰,檢查服務器端的數(shù)字證書是否正確,通過證書驗證了服務器端證書的真實有效性后,利用服務器端的公鑰生成本次對話的密鑰發(fā)送給服務器端,并告之服務器端。

d.服務器端向客戶端獲取密鑰,并用自己的私鑰解密獲取本次通訊的密鑰,并告之客戶端已經(jīng)獲取了密鑰可以開始通信了。

e.服務器端與客戶端進行通訊。

(2)安全套接層協(xié)議

一般的SSL套接字有許多默認選項,如果想修改其中的某些選項,就要用到SSLContext類的對象來實現(xiàn)。

三、基于Socket數(shù)據(jù)傳輸安全方案的研究

3.1基于Socket的對象序列化安全方案

(1)將要保密的數(shù)據(jù)標記為transient屬性

如將某一對象中password字段保護起來,可以對該字段屬性設置為PrivatetransientStringpassword;當對象在序列化發(fā)生時,Java虛擬機將被聲明為transient的所有域。

(2)實現(xiàn)Externalizable接口

Externalizable接口屬于Serializable接口的子類。但是如果采用這種Externalizable接口的方法,必須就要聲明writeExternal()和readExternal()兩個函數(shù)。將不需要被序列化的字段提取出來放到父類中去,讓子類實現(xiàn)Serializable接口,這樣的話父類相應的字段數(shù)據(jù)就可以不被序列化。

3.2基于Socket的數(shù)字簽名安全方案

(1)開發(fā)簽名的數(shù)據(jù)對象

首先需要有一個待簽名的對象,而這個對象在進行序列化時,對象中只出現(xiàn)公鑰。

(2)開發(fā)客戶端

客戶端需要實現(xiàn)讀取文件內(nèi)容,使用安全API接口來產(chǎn)生一對密鑰(包含公有和私有)、簽名文件內(nèi)容,并且通過網(wǎng)絡來發(fā)送加密后的對象給服務器,相關(guān)類和方法及步驟如下:

a.使用KeyPairGenerator類來產(chǎn)生公共及私有密鑰。

b.使用KeyPairGenerator類的initialize()方法來完成初始化密鑰對。

c.獲得密鑰。

d.獲取一個簽名的對象。e.初始化簽名對象。

e.把需要簽名的數(shù)據(jù)提供給簽名對象,將需要簽名的數(shù)據(jù)讀到一個字節(jié)數(shù)組,然后再通過調(diào)用Signature類的update方法,再把數(shù)組提供給簽名對象。

f.產(chǎn)生簽名,然后通過網(wǎng)絡發(fā)送。

(3)開發(fā)服務器端

a.創(chuàng)建Signature類的一個實例。

b.用公有密鑰初始化對象。

c.使用update()方法提供簽名的數(shù)據(jù)來給需要驗證的簽名。

3.3基于Socket的SSL安全方案

SSL協(xié)議可分為兩層:第一層是SSL記錄協(xié)議,它是建立在可靠的傳輸層協(xié)議之上,為應用層協(xié)議提供數(shù)據(jù)壓縮、封裝、加密等基本功能;第二層是SSL握手協(xié)議,它是建立在SSL記錄協(xié)議之上,用在數(shù)據(jù)傳輸開始前,通信雙方身份認證、交換加密密鑰、協(xié)商加密算法等初始化協(xié)商功能?;赟ocket的采用SSL協(xié)議的傳輸安全方案需要用到一個Java數(shù)據(jù)證書的管理工具Keytool。Keytool將密鑰(key)和證書(certificates)保存在一個稱為keystore的文件當中,每個keystore都關(guān)聯(lián)著這一個獨一無二的公鑰。

四、結(jié)束語

網(wǎng)絡數(shù)據(jù)傳輸安全已成為網(wǎng)絡應用發(fā)展的一個瓶頸。本文分析研究了網(wǎng)絡數(shù)據(jù)基于JavaSocket的傳輸安全問題,對基于JavaSocket的網(wǎng)絡數(shù)據(jù)傳輸安全的三種技術(shù)進行了深入研究和探討,提出了三種基于JavaSocket網(wǎng)絡數(shù)據(jù)傳輸?shù)陌踩募夹g(shù)方案。

參考文獻

[1]? 耿祥義.Java2實用教程[M].北京:清華大學出版社,2013.

[2]? 王一飛.Java網(wǎng)絡程序設計[M].北京:中國電力出版社,2010.

[3]? 姚凱,劉琳琳.基于Java多線程技術(shù)的網(wǎng)絡編程研究[J].電子技術(shù)與軟件工程,2017,8:12

猜你喜歡
數(shù)字簽名
淺析計算機安全防護中數(shù)字簽名技術(shù)的應用
基于數(shù)字簽名的QR碼水印認證系統(tǒng)
數(shù)字簽名簡述
掌握方法用好數(shù)字簽名
個人電腦(2014年12期)2014-12-29 13:29:47
基于數(shù)字簽名和HSM的數(shù)據(jù)庫篡改檢測機制
復制數(shù)字簽名,巧妙偽裝病毒
高雄市| 大连市| 鹤峰县| 湘阴县| 高青县| 浙江省| 普宁市| 稷山县| 武穴市| 元朗区| 东丰县| 南召县| 信宜市| 崇州市| 怀集县| 潞西市| 江达县| 荔浦县| 莱西市| 利津县| 五原县| 正宁县| 合水县| 林州市| 柏乡县| 遵义县| 安庆市| 搜索| 乡城县| 黎城县| 乐昌市| 南皮县| 临高县| 达日县| 青冈县| 咸宁市| 崇左市| 南华县| 上蔡县| 宁城县| 雷波县|