網(wǎng)絡(luò)環(huán)境與編程設(shè)計(jì)性試驗(yàn)_第1頁(yè)
網(wǎng)絡(luò)環(huán)境與編程設(shè)計(jì)性試驗(yàn)_第2頁(yè)
網(wǎng)絡(luò)環(huán)境與編程設(shè)計(jì)性試驗(yàn)_第3頁(yè)
網(wǎng)絡(luò)環(huán)境與編程設(shè)計(jì)性試驗(yàn)_第4頁(yè)
網(wǎng)絡(luò)環(huán)境與編程設(shè)計(jì)性試驗(yàn)_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、一、 實(shí)驗(yàn)?zāi)康?. 進(jìn)一步掌握網(wǎng)絡(luò)協(xié)議 TCP 協(xié)議與套接字編程;2. 掌握網(wǎng)絡(luò)安全中數(shù)據(jù)的加密與傳輸;3. 進(jìn)一步掌握 FTP 協(xié)議文件傳輸;4. 鞏固更早之前所學(xué)知識(shí);5. 鍛煉學(xué)生綜合編程能力;二、 實(shí)驗(yàn)內(nèi)容與要求設(shè)計(jì)一個(gè)客戶端和服務(wù)器端,實(shí)現(xiàn)數(shù)據(jù)網(wǎng)絡(luò)聊天和文件傳送功 能,具體的要求如下:1. 服務(wù)器端和客戶端各產(chǎn)生 RSA 的一對(duì)密鑰,分別是私鑰 CSK 和公鑰CPK (客戶端),以及私鑰SSK和公鑰SPK (服務(wù)端),同時(shí) 把自己的公鑰發(fā)送給對(duì)方;2. 服務(wù)器端和客戶端各產(chǎn)生一個(gè) DES密鑰Key,并用密鑰Key 來(lái)加密要發(fā)送的信息或文件;3客戶端和服務(wù)器端用對(duì)方的公鑰加密自己的 D

2、ES密鑰Key,得 到 Key_enc 并發(fā)送給對(duì)方;4. 客戶端和服務(wù)器端對(duì)接收到的 Key_enc用自己的RSA私鑰進(jìn) 行解密,得到對(duì)方的 DES 密鑰 Key;5. 客戶端和服務(wù)器端對(duì)接收到的信息和文件進(jìn)行DES解密,得到真正的原文件和聊天信息。6利用傳送的 DES 密鑰,實(shí)現(xiàn)客戶端和服務(wù)器端之間 DES 加密安全傳輸文件實(shí)驗(yàn)環(huán)境Win dows2007Microsoft visual studio 2008四、實(shí)驗(yàn)源程序命名空間:using System;using System.Drawing;using System.Collections;using System.Compone

3、ntModel;using System.Windows.Forms;using System.Data;using System.Net;using System.Net.Sockets ;using System.Threading ;using SystemO;using System.Security.Cryptography;using System.Globalization;using System.Text;(1)客戶端:1> 與服務(wù)器端連接代碼:private void button1_Click( object sender, System. EventArgs e)

4、 trymyIP=IPAddress .Parse (textBox1.Text);catchMessageBox.Show ( " 您輸入的 IP 地址格式不正確 !" );tryMyServer=new IPEndPoint (myIP, Int32 .Parse (textBox2.Text ); connectsock= newSocket ( AddressFamily .InterNetwork ,SocketType .Stream , ProtocolType .Tcp );功! rn" );connectsock.Connect (MyServe

5、r);" 與主機(jī) " +textBox1.Text +listBox1.Items.Add (" 端口 "+textBox2.Text+"連接成if (button8.Enabled !=true | button9.Enabled !=true )Thread thread =new Thread ( new ThreadStart(receive1);thread.Start();elseThread thread =new Thread ( new ThreadStart(receive);thread.Start(); catch( E

6、xception ee)MessageBox.Show (ee.Message );發(fā)送公鑰 以及獲得對(duì)方公鑰:private void Form1_Load_1( object sender, EventArgs e) 2產(chǎn)生 RSA 密鑰、RSACryptoServiceProvider rs =CPK = rs.ToXmlString(CSK = rs.ToXmlString(key = GenerateKey();/DESfalse );/ true );/密鑰new RSACryptoServiceProvider (); 公鑰私鑰 發(fā)送公鑰:public void sendCPK(

7、)Byte sendbyte = new Byte 64;string send = CPK;NetworkStream netstream = new NetworkStream (connectsock);sendbyte = System.Text. Encoding .BigEndianUnicode.GetBytes(send.ToCharArray(); netstream.Write(sendbyte, 0, sendbyte.Length);netstream.Flush(); 獲得對(duì)方公鑰:private void button7_Click_1( object sender

8、, EventArgs e)tryrecSPK = richTextBox1.Text;MessageBox.Show( "獲取成功 ");richTextBox1.Text = "" ;button7.Enabled =false ;catchMessageBox.Show( "獲取失敗 ");3產(chǎn)生DES密鑰key,用對(duì)方公鑰加密key,發(fā)送給對(duì)方: 產(chǎn)生DES密鑰:public string GenerateKey()DESCryptoServiceProvider desCrypto =( DESCryptoServicePr

9、ovider ) DESCryptoServiceProvider .Create(); return ASCIIEncoding .ASCII.GetString(desCrypto.Key);private void Form1_Load_1( object sender, EventArgs e)RSACryptoServiceProvider rs = new RSACryptoServiceProvider ();CPK = rs.ToXmlString(false );CSK = rs.ToXmlString(true );key = GenerateKey(); 加密key:pu

10、blic void jiamikey()byte str = Encoding .ASCII.GetBytes(key );RSACryptoServiceProvider crypt = new RSACryptoServiceProvider (); crypt.FromXmlString(recSPK);Key_enc = crypt.Encrypt(str,true ); 發(fā)送 key_enc: public void sendKey_enc()jiamikey();Byte sendbyte = new Byte 64;NetworkStream netstream = new Ne

11、tworkStream (connectsock); sendbyte = Key_enc;netstream.Write(sendbyte, 0, sendbyte.Length);4接收加密的 key:private void button10_Click( object sender, EventArgs e) try recKey_enc = richTextBox1.Text;MessageBox.Show( "接收成功 "); richTextBox1.Text ="" ;button10.Enabled =false ;catchMessa

12、geBox.Show( "接收失敗 ");5用密鑰解密 key: public void jiemikey()RSACryptoServiceProvider crypt = new RSACryptoServiceProvider (); crypt.FromXmlString(CSK);Byte reckey_enc = Encoding .Unicode.GetBytes(recKey_enc); str_de = crypt.Decrypt(reckey_enc,true );str_key =Encoding .ASCII.GetString(str_de);pr

13、ivate void button11_Click( object sender, EventArgs e) try jiemikey(); button11.Enabled = false ;MessageBox.Show( "解密成功 ");catchMessageBox.Show( "解密失敗 ");6文件上傳代碼:privatevoid button4_Click( object sender, EventArgs e)OpenFileDialog opFilDlg =new OpenFileDialog ();if (opFilDlg.Show

14、Dialog() =DialogResult .OK)textBox3.Text= opFilDlg.FileName;上傳:private void Upload( string filename) FileInfo fileInf = new FileInfo (filename);string uri = "ftp:/" + textBox1.Text + "/" + fileInf.Name; FtpWebRequest reqFTP;reqFTP = ( FtpWebRequest) FtpWebRequest.Create( new Uri

15、( "ftp:/"+ textBox1.Text + "/"+ fileInf.Name);reqFTP.KeepAlive = reqFTP.Method = reqFTP.UseBinary =false ;WebRequestMethods. Ftp .UploadFile; true ;reqFTP.ContentLength = fileInf.Length;int buffLength = 2048;byte buff =new byte buffLength;int contentLen;FileStream fs = fileInf.Op

16、enRead();tryStream strm = reqFTP.GetRequestStream();contentLen = fs.Read(buff, 0, buffLength);while (contentLen != 0)strm.Write(buff, 0, contentLen);contentLen = fs.Read(buff, 0, buffLength);strm.Close();fs.Close();MessageBox.Show( " 上傳成功! "); catch ( Exception ex)MessageBox.Show(ex.Messag

17、e, "上傳出錯(cuò) ");private void button5_Click( object sender, EventArgs e)Upload(textBox3.Text.Trim();7>文件下載代碼:private void Download( string filePath, string fileName)FtpWebRequest reqFTP;tryFileStream outputStream = new FileStream (filePath + "" + fileName, FileMode .Create);reqFTP

18、= (FtpWebRequest) FtpWebRequest.Create( new Uri ( "ftp:/"+ textBox1.Text+ "/" + fileName);reqFTP.Method = WebRequestMethods. Ftp .DownloadFile; reqFTP.UseBinary = true ;/ reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);FtpWebResponseresponse = ( FtpWebResponse)

19、reqFTP.GetResponse();Stream ftpStream = response.GetResponseStream();long cl = response.ContentLength;int bufferSize = 2048;int readCount;byte buffer = new byte bufferSize;readCount = ftpStream.Read(buffer, 0, bufferSize);while (readCount > 0)outputStream.Write(buffer, 0, readCount); readCount =

20、ftpStream.Read(buffer, 0, bufferSize);ftpStream.Close();outputStream.Close();response.Close();catch ( Exception ex)MessageBox.Show(ex.Message);private void button6_Click( object sender, EventArgs e)tryFolderBrowserDialog fldDlg = new FolderBrowserDialog ();if (textBox4.Text.Trim().Length > 0)if (

21、fldDlg.ShowDialog() = DialogResult .OK)Download(fldDlg.SelectedPath, textBox4.Text.Trim();elseMessageBox.Show( " 請(qǐng)輸入要下載的文件名稱 " );MessageBox.Show( " 下載成功! ");catchMessageBox.Show( " 下載失?。?");8>發(fā)送加密消息,進(jìn)行對(duì)話代碼:public string EncryptString( string sInputString, string sKey

22、)byte data = Encoding .UTF8.GetBytes(sInputString);DESCryptoServiceProvider DES = new DESCryptoServiceProvider (); DES.Key = ASCIIEncoding .ASCII.GetBytes(sKey); DES.IV = ASCIIEncoding .ASCII.GetBytes(sKey);ICryptoTransform desencrypt = DES.CreateEncryptor();byte result = desencrypt.TransformFinalBl

23、ock(data, 0, data.Length); return BitConverter .ToString(result);private void button2_Click( object sender, System. EventArgs e)tryByte sendbyte= new Byte 64;string send=richTextBox2.Text + "rn" ;str_encryp = EncryptString(send, key);NetworkStream netstream= new NetworkStream (connectsock)

24、; sendbyte =System.Text. Encoding .BigEndianUnicode.GetBytes(str_encryp.ToCharArray(); netstream.Write (sendbyte,0,sendbyte.Length ); / 向 socket 服務(wù)器發(fā)送信息 netstream.Flush ();catchMessageBox.Show ( "連接沒有建立!無(wú)法發(fā)送! ");9>接收對(duì)方消息,解密:public string DecryptString( string sInputString, string sKey)s

25、tring sInput = sInputString.Split("-" .ToCharArray();byte data = new byte sInput.Length;for ( int i = 0; i < sInput.Length; i+)datai =byte .Parse(sInputi, NumberStyles .HexNumber);DESCryptoServiceProvider DES = new DESCryptoServiceProvider ();DES.Key = ASCIIEncoding .ASCII.GetBytes(sKey

26、);DES.IV = ASCIIEncoding .ASCII.GetBytes(sKey);ICryptoTransform desencrypt = DES.CreateDecryptor();byte result = desencrypt.TransformFinalBlock(data, 0, data.Length); return Encoding .UTF8.GetString(result);接收服務(wù)器端加密消息:private void receive1()while ( true )Byte Rec = new byte 64;NetworkStream netstrea

27、m = new NetworkStream (connectsock); netstream.Read(Rec, 0, Rec.Length);/ 讀取客戶發(fā)送來(lái)的信息。string RecMessage = System.Text. Encoding .BigEndianUnicode.GetString(Rec); str_descryp = DecryptString(RecMessage, str_key); richTextBox1.AppendText(str_descryp + "rn" ); / 寫入到接收信息欄中。 接收公鑰、key_enc:private

28、 void receive()while ( true )Byte Rec = new byte 64;NetworkStream netstream = new NetworkStream (connectsock);netstream.Read(Rec, 0, Rec.Length);string RecMessage = System.Text./ 讀取客戶發(fā)送來(lái)的信息。Encoding .BigEndianUnicode.GetString(Rec);"rn" ); / 寫入到接收信息欄中richTextBox1.AppendText(RecMessage +10斷

29、開連接代碼:private void button3_Click( object sender, System. EventArgs e) trySocketShutdown.Both);/ 斷開連接。connectsock.Shutdown(connectsock.Close ();listBox1.Items .Add ("與主機(jī)"+textBox1.Text +"端口 " +textBox2.Text +" 斷開連接! rn" );thread.Abort();catchMessageBox.Show ( "連接沒有建

30、立!斷開無(wú)效! ");(2)服務(wù)器端:1監(jiān)聽客戶端代碼:private void button1_Click( object sender, System. EventArgs e)trymylP=PAddress .Parse (textBox1.Text);catchMessageBoxShow ("您輸入的IP地址格式不正確!");tryThread thread= new Thread ( new ThreadStart (accp); / 生成監(jiān)聽線程; thread.Start ();catch ( Exception ee) listBox1.Ite

31、ms.Add (ee.Message) ;private void accp()MyServer= new IPEndPoint (myIP, Int32 .Parse (textBox2.Text);sock= new Socket); / 實(shí)例化 Socket( AddressFamily .InterNetwork , SocketType .Stream , ProtocolType .Tcp 對(duì)象。sock.Bind(MyServer); / 綁定將訪問(wèn)的主機(jī)。/ 開始監(jiān)聽,最大包長(zhǎng)。"主機(jī) "+textBox1.Text + "端口" +te

32、xtBox2.Text +sock.Listen (50);listBox1.Items.Add (聽 rn" );"開始監(jiān)while (true )accsock=sock.Accept ();/ 接收客戶端的服務(wù)請(qǐng)求。if (accsock.Connected)listBox1.Items.Add (" 與客戶建立連接。 ");if (button8.Enabled !=true | button9.Enabled !=true )Thread thread =new Thread ( new ThreadStart(round1);thread.S

33、tart();elseThread thread =new Thread ( new ThreadStart(round);thread.Start();2> 產(chǎn)生 RSA 密鑰、發(fā)送公鑰以及獲得對(duì)方公鑰 :private void StateObject_Load( object sender, System. EventArgs e) RSACryptoServiceProvider rs =new RSACryptoServiceProvider ();SPK = rs.ToXmlString(false );/公鑰true );/密鑰密鑰SSK = rs.ToXmlString(

34、 key = GenerateKey();/DES 發(fā)送公鑰:public void sendSPK()Byte sendbyte = new Byte 64;string send = SPK;NetworkStream netstream = new NetworkStream (accsock);sendbyte = System.Text. Encoding .BigEndianUnicode.GetBytes(send.ToCharArray(); netstream.Write(sendbyte, 0, sendbyte.Length);/ 向客戶發(fā)送信息。 獲得對(duì)方公鑰:priv

35、ate void button7_Click_1( object sender, EventArgs e)tryrecCPK = richTextBox1.Text ;MessageBox.Show( "獲取成功 ");richTextBox1.Text = "" ;button7.Enabled =false ;catchMessageBox.Show( "獲取失敗 ");3產(chǎn)生DES密鑰key,用對(duì)方公鑰加密key,發(fā)送給對(duì)方: 產(chǎn)生DES密鑰:public string GenerateKey()DESCryptoService

36、Provider desCrypto =( DESCryptoServiceProvider ) DESCryptoServiceProvider .Create();return ASCIIEncoding .ASCII.GetString(desCrypto.Key);private void StateObject_Load( object sender, System. EventArgs e)RSACryptoServiceProvider rs = new RSACryptoServiceProvider ();SPK = rs.ToXmlString(false );SSK =

37、rs.ToXmlString(true );key = GenerateKey(); 加密:public void jiamikey()byte str = Encoding .ASCII.GetBytes(key );RSACryptoServiceProvider crypt = new RSACryptoServiceProvider (); crypt.FromXmlString(recSPK);Key_enc = crypt.Encrypt(str, true );發(fā)送 Key_enc:public void sendKey_enc() jiamikey();Byte sendbyt

38、e = new Byte 64;NetworkStream netstream = new NetworkStream (connectsock); sendbyte = Key_enc;netstream.Write(sendbyte, 0, sendbyte.Length);/ 向socket 服務(wù)器發(fā)送信息private void button9_Click( object sender, EventArgs e)trysendKey_enc();MessageBox.Show( "發(fā)送成功 "); button9.Enabled =false ;catchMessa

39、geBox.Show( "發(fā)送失敗 ");4接收加密的 key:private void button10_Click( object sender, EventArgs e)tryrecKey_enc = richTextBox1.Text; MessageBox.Show( "接收成功 ");richTextBox1.Text ="" ;button10.Enabled =false ;catchMessageBox.Show( "接收成功 ");5用密鑰解密 key: public void jiemikey

40、()RSACryptoServiceProvider crypt = new RSACryptoServiceProvider (); crypt.FromXmlString(SSK);Byte reckey_enc = Encoding .Unicode.GetBytes(recKey_enc); str_de = crypt.Decrypt(reckey_enc,true );str_key =Encoding .ASCII.GetString(str_de); private void button11_Click( object sender, EventArgs e) try jie

41、mikey(); button11.Enabled = false ;MessageBox.Show( "解密成功 ");catch MessageBox.Show( "解密失敗 "); 6文件上傳代碼: private void button4_Click( object sender, EventArgs e) OpenFileDialog opFilDlg = new OpenFileDialog (); if (opFilDlg.ShowDialog() =DialogResult .OK) textBox3.Text= opFilDlg.Fil

42、eName;上傳:private void Upload( string filename) FileInfo fileInf = new FileInfo (filename); string uri = "ftp:/"+ textBox1.Text +"/" + fileInf.Name;FtpWebRequest reqFTP;reqFTP = ( FtpWebRequest) FtpWebRequest.Create( new Uri ( "ftp:/" + textBox1.Text + "/" + fi

43、leInf.Name);reqFTP.KeepAlive =false ;reqFTP.Method =WebRequestMethods. Ftp .UploadFile;reqFTP.UseBinary =true ;reqFTP.ContentLength = fileInf.Length;int buffLength = 2048;byte buff =new byte buffLength;int contentLen;FileStream fs = fileInf.OpenRead();tryStream strm = reqFTP.GetRequestStream();conte

44、ntLen = fs.Read(buff, 0, buffLength);while (contentLen != 0)strm.Write(buff, 0, contentLen);contentLen = fs.Read(buff, 0, buffLength);strm.Close();fs.Close();MessageBox.Show( " 上傳成功! ");catch ( Exception ex)MessageBox.Show(ex.Message, "上傳出錯(cuò) ");private void button5_Click( object s

45、ender, EventArgs e) Upload(textBox3.Text.Trim();7文件下載代碼:private void Download( string filePath, string fileName) FtpWebRequest reqFTP;tryFileStream outputStream = new FileStream (filePath + "" + fileName, FileMode .Create);reqFTP = (FtpWebRequest) FtpWebRequest.Create( new Uri ( "ftp:

46、/"+ textBox1.Text+ "/" + fileName);reqFTP.Method = WebRequestMethods. Ftp .DownloadFile; reqFTP.UseBinary = true ;FtpWebResponseresponse = ( FtpWebResponse)reqFTP.GetResponse(); Stream ftpStream = response.GetResponseStream();long cl = response.ContentLength;int bufferSize = 2048;int

47、readCount;byte buffer = new byte bufferSize;readCount = ftpStream.Read(buffer, 0, bufferSize);while (readCount > 0) outputStream.Write(buffer, 0, readCount);readCount = ftpStream.Read(buffer, 0, bufferSize);ftpStream.Close(); outputStream.Close();response.Close();catch ( Exception ex) MessageBox.

48、Show(ex.Message);private void button6_Click( object sender, EventArgs e)tryFolderBrowserDialog fldDlg = new FolderBrowserDialog ();if (textBox4.Text.Trim().Length > 0)if (fldDlg.ShowDialog() = DialogResult .OK) Download(fldDlg.SelectedPath, textBox4.Text.Trim();elseMessageBox.Show( " 請(qǐng)輸入要下載的

49、文件名稱 " );MessageBox.Show( " 下載成功! ");catchMessageBox.Show( " 下載失?。?"); 8發(fā)送加密消息,進(jìn)行對(duì)話代碼:public string EncryptString( string sInputString, string sKey) byte data = Encoding .UTF8.GetBytes(sInputString); DESCryptoServiceProvider DES = new DESCryptoServiceProvider ();DES.Key = AS

50、CIIEncoding .ASCII.GetBytes(sKey); DES.IV = ASCIIEncoding .ASCII.GetBytes(sKey);ICryptoTransform desencrypt = DES.CreateEncryptor();byte result = desencrypt.TransformFinalBlock(data, 0, data.Length); return BitConverter .ToString(result);private void button2_Click( object sender, System. EventArgs e

51、)tryByte sendbyte= new Byte 64;string send=richTextBox2.Text + "rn" ;str_encryp = EncryptString(send, key);NetworkStream netstream= new NetworkStream (accsock);sendbyte =/ 向客戶發(fā)送信息System.Text. Encoding .BigEndianUnicode.GetBytes(str_encryp.ToCharArray();netstream.Write (sendbyte,0,sendbyte.

52、Length );catchMessageBox.Show ( "連接沒有建立!無(wú)法發(fā)送! " );9接收對(duì)方消息,解密:public string DecryptString( string sInputString, string sKey) "-" .ToCharArray();string sInput = sInputString.Split( byte data =new byte sInput.Length;for ( int i = 0; i sInput.Length; i+)datai =byte .Parse(sInputi,NumberStyles .HexNumber); DESCryptoServiceProvider DES = new DESCryptoServiceProvider ();DES.Key = ASCIIEncoding .ASCII.GetBytes(sKey); DES.IV = ASCIIEncoding .ASCII.GetBytes(sKey);ICryptoTransform desencrypt = DES.CreateDecryptor();byte result = desen

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論