




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村個(gè)體農(nóng)場(chǎng)經(jīng)營(yíng)合同范本
- 包料裝修合同范本
- 人流手術(shù)合同范本
- 2024年全國(guó)特崗教師招聘考試真題
- 2024年欽州市遴選公務(wù)員考試真題
- 2024年臺(tái)州溫嶺市中醫(yī)院招聘員工筆試真題
- 出售隔斷酒柜合同范本
- 個(gè)人房屋擔(dān)保合同范本
- 光伏清洗施工合同范例
- 2024年保山市智源高級(jí)中學(xué)招聘教師考試真題
- 2024年湖南長(zhǎng)沙自貿(mào)投資發(fā)展集團(tuán)有限公司招聘筆試沖刺題(帶答案解析)
- 2024-2030年中國(guó)演出行業(yè)市場(chǎng)研究及發(fā)展前景預(yù)測(cè)報(bào)告
- 上市公司廉潔自律協(xié)議書
- JBT 14714-2024 鋰離子電池X射線檢測(cè)設(shè)備(正式版)
- DL-T1362-2014輸變電工程項(xiàng)目質(zhì)量管理規(guī)程
- 2023年公務(wù)員考試青岡縣《行政職業(yè)能力測(cè)驗(yàn)》全真模擬試卷含解析
- 金融知識(shí)普及
- (100題)2024時(shí)事政治考試題庫(kù)
- 患者管道滑脫危險(xiǎn)因素評(píng)估及護(hù)理措施表
- 部編版小學(xué)一年級(jí)語(yǔ)文下冊(cè)《春夏秋冬》課件
- 中國(guó)煙草總公司鄭州煙草研究院筆試試題2023
評(píng)論
0/150
提交評(píng)論