日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java网络编程及安全

發(fā)布時(shí)間:2025/3/21 java 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java网络编程及安全 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、實(shí)驗(yàn)內(nèi)容:

1.運(yùn)行教材上TCP代碼,結(jié)對進(jìn)行,一人服務(wù)器,一人客戶端;

2.利用加解密代碼包,編譯運(yùn)行代碼,一人加密,一人解密;

3.集成代碼,一人加密后通過TCP發(fā)送;

注:加密使用AES或者DES/AES或者DES加密密鑰key并發(fā)送,使用服務(wù)器的公鑰加密/公鑰算法使用RSA或DH/檢驗(yàn)發(fā)送信息的完整性使用MD5或者SHA3;

4.用Git進(jìn)行版本控制。

5.完成Blog

我的結(jié)對伙伴是20135126謝飛帆

我負(fù)責(zé)的是客戶端,謝飛帆負(fù)責(zé)的是服務(wù)器

二、實(shí)驗(yàn)步驟

1.信息安全傳送:?????????????

???

發(fā)送方A——————>接收方B

A加密時(shí),用B的公鑰

B解密時(shí),用B的私鑰

  發(fā)送方A對信息(明文)采用DES密鑰加密,使用RSA加密前面的DES密鑰信息,最終將混合信息進(jìn)行傳遞。同時(shí)用hash函數(shù)將明文進(jìn)行用作驗(yàn)證。

 ?? 接收方B接收到信息后,用RSA解密DES密鑰信息,再用RSA解密獲取到的密鑰信息解密密文信息,最終就可以得到我們要的信息(明文)。用hash函數(shù)對解出的明文進(jìn)行驗(yàn)證,與發(fā)送過來的has

import java.net.*;

?

import java.io.*;

?

import javax.crypto.*;

?

import java.security.*;

?

import javax.crypto.Cipher;

?

?

?

public class MyClient {

?

??? /**

?

???? * @param args the command line arguments

?

???? */

?

??? public static void main(String args[]) throws Exception {

?

???????

?

??????? //隨機(jī)密鑰產(chǎn)生

?

???????? KeyGenerator kg=KeyGenerator.getInstance("DESede");

?

???????? kg.init(168);

?

??????? SecretKey k=kg.generateKey( );

?

??????? FileOutputStream? f=new FileOutputStream("key1.dat");

?

???????? ??? ObjectOutputStream b=new? ObjectOutputStream(f);

?

???????? ??? b.writeObject(k);???????

?

???????

?

??????????? //加密輸入

?

??????????? BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));

?

???????? ??? System.out.print("請輸入待發(fā)送的數(shù)據(jù):");

?

???????? ??? String srt=stdin.readLine();

?

??????????????????

?

???????? ??? FileInputStream d=new FileInputStream("key1.dat");

?

???????? ??? ObjectInputStream a=new ObjectInputStream(d);

?

???????? ??? Key e=(Key)a.readObject( );

?

??????????????????

?

?????????????????? Cipher cp=Cipher.getInstance("DESede");

?

??????? cp.init(Cipher.ENCRYPT_MODE, e);

?

??????????????????

?

??????? byte ptext[]=srt.getBytes("UTF8");

?

??????? for(int i=0;i<ptext.length;i++){

?

??????? //??? System.out.print(ptext[i]+",");

?

??????? }

?

??????????????????

?

??????? System.out.println("");

?

??????? byte ctext[]=cp.doFinal(ptext);

?

??????? for(int i=0;i<ctext.length;i++){

?

??????? //???? System.out.print(ctext[i] +",");

?

??????? }

?

??????????????????

?

?????????????????? FileOutputStream f2=new FileOutputStream("SEnc.dat");

?

??????? f2.write(ctext);???

?

?????

?

?????? //發(fā)送

?

????? try {

?

?????????? //創(chuàng)建連接特定服務(wù)器的指定端口的Socket對象

?

??????? Socket socket = new Socket("192.168.253.1", 4431);

?

?????????????????? Socket socket1 = new Socket("192.168.253.1", 4430);

?

??????????? //獲得從服務(wù)器端來的網(wǎng)絡(luò)輸入流

?

??????????? BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

?

??????????? //獲得從客戶端向服務(wù)器端輸出數(shù)據(jù)的網(wǎng)絡(luò)輸出流

?

??????? PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);

?

???????? ??? PrintWriter out1=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);

?

??????????? //創(chuàng)建鍵盤輸入流,以便客戶端從鍵盤上輸入信息

?

??????????? //BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));

?

??????????? System.out.print("讀取文件中...\n");?

?

??????????? FileInputStream f1=new FileInputStream("key1.dat");

?

???????? ??? FileInputStream f3=new FileInputStream("SEnc.dat");

?

??????????? //String str=stdin.readLine(); //從鍵盤讀入待發(fā)送的數(shù)據(jù)

?

??????????? String str;

?

??????????? out.println(f1);? //通過網(wǎng)絡(luò)傳送到服務(wù)器

?

???????? ??? out1.println(f3);

?

???????????

?

??????????? System.out.print("已發(fā)送\n");?

?

???????????

?

??????????? str=in.readLine();//從網(wǎng)絡(luò)輸入流讀取結(jié)果

?

??????????? System.out.println( "從服務(wù)器接收到的結(jié)果為:"+str); //輸出服務(wù)器返回的結(jié)果

?

?????? }

?

??????? catch (Exception v) {

?

??????????? System.out.println(v);

?

??????? }

?

?????????????????? finally{

?

??????????????????????????? //stdin.close();

?

??????????????????????????? //in.close();

?

??????????????????????????? //out.close();

?

??????????????????????????? //socket.close();????????????????????????

?

?????????????????? }

?

???? }

?

}

實(shí)驗(yàn)截圖:

四、實(shí)驗(yàn)總結(jié)

?本次實(shí)驗(yàn)是我和結(jié)對伙伴一起完成的。起初我們沒有任何的實(shí)驗(yàn)思路,后來我們通過請教了老師和做出來實(shí)驗(yàn)的同學(xué)梳理清了頭緒,明確了實(shí)驗(yàn)步驟和實(shí)驗(yàn)要求。把代碼組合起來對我們是個(gè)不小的挑戰(zhàn),不僅考驗(yàn)了我們的細(xì)心程度,還考察了DES算法和RSA加密,在網(wǎng)絡(luò)連接,傳送,反饋上也有很多很難的地方,遇到有問題的地方往往需要上網(wǎng)翻閱很多資料才能找到適合的解決方案,在對代碼的不斷調(diào)試、改進(jìn)、調(diào)試、改進(jìn)后編譯成功。

轉(zhuǎn)載于:https://www.cnblogs.com/vioczw/p/4570338.html

總結(jié)

以上是生活随笔為你收集整理的Java网络编程及安全的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。