第十周學習總結
第十周學習總結
TCP編程以及UDP方式的網絡編程
?在Java語言中,數據傳輸功能由Java IO實現,也就是說只需要從連接中獲得輸入流和輸出流即可,然後將需要發送的數據寫入連接對象的輸出流中,在發送完成以後從輸入流中讀取數據即可。
OutputStream os = socket1.getOutputStream(); //獲得輸出流
InputStream is = socket1.getInputStream(); //獲得輸入流
?在Java API中,實現UDP方式的編程,包含客戶端網絡編程和服務器端網絡編程,主要由DatagramSocket與DatagramPacket兩個類實現。
Java 密碼學算法
密碼學基礎
?我們遇到的安全問題可以歸結為安全的三個屬性(CIA金三角):機密性,完整性和可用性。
?密碼學包含密碼編碼學( Cryptography) 和密碼分析學(Cryptanalyst) 兩個分支。 編碼學與分析學相互促進, 又相互制約。 一方面, 兩者在加強密碼分析的安全上相互促進; 另一方面,兩者在實施更為有效的攻擊方面也相互影響。
?密碼學常用術語有:明文、密文、加密、解密、放送者、接收者、加密算法、解密算法、加密秘鑰、解密秘鑰、被動攻擊、主動攻擊、密碼協議等等。
?用保密通信模型來詮釋密碼學中信息傳送方式,如下圖:
?以下六種技術統稱為密碼學家的工具箱:對稱密碼、公鑰密碼、單向散列函數、消息認證碼、數字簽名以及偽隨機數生成器。
Java與密碼學
?Java安全體系結構總共分為4個部分:JCA( Java Cryptography Architecture, Java加密體系結構)、JCE( Java Cryptography Extension, Java加密擴展包)、JSSE( Java Secure Sockets Extension, Java安全套接字擴展包)、JAAS( Java Authentication and Authentication Service, Java鑒別與安全服務)。
?JCA和JCE是Java平臺提供的用於安全和加密服務的兩組API。它們並不執行任何算法,它們只是連接應用和實際算法實現程序的一組接口。 軟件開發商可以根據JCE接口( 又稱安全提供者接口) 將各種算法實現後,打包成一個Provider( 安全提供者) , 動態地加載到Java運行環境中。
Java對稱加密-DES算法
?將密鑰通過對象序列化方式保存在文件中,編程思路:(1) 獲取密鑰生成器,(2) 初始化密鑰生成器,(3) 生成密鑰,(4) 通過對象序列化方式將密鑰保存在文件中。
?將密鑰通過字節保存在文件中,編程思路:Java中所有的密鑰類都有一個getEncoded( )方法,通過它可以從密鑰對象中獲取主要編碼格式,其返回值是字節數組。其主要步驟為:(1) 獲取密鑰、(2)獲取主要編碼格式、(3) 保存密鑰編碼格式
Java非對稱加密-RSA算法
Java的KeyPairGenerator類提供了一些方法來創建密鑰對以便用於非對稱加密,密鑰對創建好後封裝在KeyPair類型的對象中,在KeyPair類中提供了獲取公鑰和私鑰的方法。具體步驟如下:
(1) 創建密鑰對生成器,(2) 初始化密鑰生成器,(3) 生成密鑰對,(4) 獲取公鑰和私鑰。
使用密鑰協定創建共享密鑰
?非對稱加密解決了密鑰分發的難題,但其計算量比對稱密鑰大,因此一般並不使用非對稱加密加密大量數據。常見的做法是:主要數據通過對稱密鑰加密,而使用非對稱加密來分發對稱密鑰,這樣就將兩者的優勢結合了起來。
?除了這種方式以外,還可以使用密鑰協定來交換對稱密鑰。執行密鑰協定的標準算法是DH算法。1.創建DH公鑰和私鑰,2.創建共享密鑰。
Java摘要算法- MD5
?使用Java計算指定字符串的消息摘要。
java.security包中的MessageDigest類提供了計算消息摘要的方法。
(1) 生成MessageDigest對象
MessageDigest m=MessageDigest.getInstance("MD5");
(2) 傳入需要計算的字符串
m.update(x.getBytes("UTF8" ));
(3) 計算消息摘要
byte s[ ]=m.digest( );
(4) 處理計算結果。
網絡
?網絡可以分為:局域網和廣域網。
?計算機網絡體系結構的通信協議劃分為七層,自下而上依次為:物理層(Physics Layer)、數據鏈路層(Data Link Layer)、網絡層(Network Layer)、傳輸層(Transport Layer)、會話層(Session Layer)、表示層(Presentation Layer)、應用層(Application Layer)。其中第四層完成數據傳送服務,上面三層面向用戶。
HTTP協議
?超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網絡協議。所有的WWW文件都必須遵守這個標準。
?一次HTTP請求包含:方法、請求頭、請求實體。
java.net.URL以及java.net.URLConnection
?URL:統一資源定位符是對可以從互聯網上得到的資源的位置和訪問方法的一種簡潔的表示,是互聯網上標準資源的地址。互聯網上的每個文件都有一個唯一的URL,它包含的信息指出文件的位置以及瀏覽器應該怎麽處理它。
?java.net.HttpURLConnection類是另外一種訪問HTTP資源的方式.HttpURLConnection類具有完全的訪問能力,可以取代HttpGet和HttpPost類.使用HttpUrlConnection訪問HTTP資源可以使用如下六步:
(1)使用java.net.URL封裝HTTP資源的url,並使用openConnection方法獲得HttpUrlConnection對象
(2)設置請求方法,例如GET,POST等
(3)設置輸入輸出及其他權限.如果要下載HTTP資源或向服務端上傳數據,需要使用如下代碼進行設置.
下載HTTP資源,需要將setDoInput方法的參數值設為true
(4)設置http請求頭.在很多情況下,要根據實際情況設置一些HTTP請求頭,例如下面的代碼設置了Charset請求頭的值為UTF-8.
(5)輸入和輸出數據.這一步是對HTTP資源的讀寫操作.也就是通過InputStream和OutputStream讀取和寫入數據.下面的代碼獲得了InputStream對象和OutputStream對象.
(6)關閉輸入和輸出流.雖然關閉輸入輸出流並不是必需的,在應用程序結束後,輸入輸出流會自動關閉,但顯示關閉輸入輸出流是一個好習慣.
第十周學習總結