当前位置: 首页 > 编程语言 > C#

如何在将消息发送到服务器时对其进行加密?你能为我添加一些代码吗,因为我是加密新手?-有什么帮助吗?分享

时间:2023-04-10 15:18:08 C#

我的消息发送到服务器时如何加密?你能为我添加一些代码吗,因为我是加密新手?/有什么帮助吗?我想在从客户端发送到服务器时加密我的消息,我该怎么做?客户端使用系统;使用System.Collections.Generic;使用System.ComponentModel;使用系统数据;使用系统绘图;使用System.Linq;使用系统文本;使用System.Windows.Forms;使用System.Net.Sockets;使用系统线程;namespaceSocketClient{publicpartialclassSocketClient:Form{System.Net.Sockets.TcpClientclientSocket=newSystem.Net.Sockets.TcpClient();NetworkStreamserverStream=default(NetworkStream);字符串读取数据=空;publicSocketClient(){InitializeComponent();}privatevoidgetMessage(){while(true){serverStream=clientSocket.GetStream();intbuffSize=0;byte[]inStream=newbyte[10025];buffSize=clientSocket.ReceiveBufferSize;serverStream.Read(inStream,0,buffSize);字符串returndata=System.Text.Encoding.ASCII.GetString(inStream);readData=""+返回数据;味精();}}privatevoidmsg(){if(this.InvokeRequired)this.Invoke(newMethodInvoker(msg));elsetextDisplay.Text=textDisplay.Text+Environment.NewLine+">>"+readData;}privatevoidbuttonConnect_Click(objectsender,EventArgse){readData="已连接到NYP聊天服务器...";味精();//clientSocket.Connect("127.0.0.1",8888);clientSocket.Connect(textIP.Text,Convert.ToInt32(textPort.Text));serverStream=clientSocket.GetStream();byte[]outStream=System.Text.Encoding.ASCII.GetBytes(textName.Text+"$");serverStream.Write(outStream,0,outStream.Length);serverStream.Flush();线程ctThread=newThread(getMessage);ctThread.Start();}privatevoidbuttonSend_Click(objectsender,EventArgse){//如果没有连接服务器则显示消息框if(serverStream==null){MessageBox.Show("请先连接到服务器!");返回;}//发送文本byte[]outStream=System.Text.Encoding.ASCII.GetBytes(textSend.Text+"$");服务器端am.Write(outStream,0,outStream.Length);serverStream.Flush();//清除文本textSend.Text="";}privatevoidtextDisplay_TextChanged(objectsender,EventArgse){textDisplay.SelectionStart=textDisplay.Text.Length;textDisplay.ScrollToCaret();textDisplay.Refresh();}privatevoidtextSend_TextChanged(objectsender,EventArgse){buttonSend.Enabled=!string.IsNullOrEmpty(textSend.Text);}}}服务器使用系统;使用系统线程;使用System.Net.Sockets;使用系统文本;使用系统集合;namespaceConsoleApplication1{classProgram{publicstaticHashtableclientsList=newHashtable();staticvoidMain(string[]args){//TcpListenerserverSocket=newTcpListener(portFromAppConfig);TcpListenerserverSocket=newTcpListener(9999);TcpClientclientSocket=default(TcpClient);整数计数器=0;serverSocket.Start();Console.WriteLine("欢迎来到NYP聊天服务器");计数器=0;while((true)){计数器+=1;客户端Socket=serverSocket.AcceptTcpClient();byte[]bytesFrom=newbyte[10025];字符串dataFromClient=null;NetworkStreamnetworkStream=clientSocket.GetStream();networkStream.Read(bytesFrom,0,(int)clientSocket.ReceiveBufferSize);dataFromClient=System.Text.Encoding.ASCII.GetString(bytesFrom);dataFromClient=dataFromClient.Substring(0,dataFromClient.IndexOf("$"));clientsList.Add(dataFromClient,clientSocket);广播(dataFromClient+“已连接”,dataFromClient,false);Console.WriteLine(dataFromClient+"已加入聊天室");handleClinet客户端=newhandleClinet();client.startClient(clientSocket,dataFromClient,clientsList);}clientSocket.Close();serverSocket.Stop();Console.WriteLine("退出");控制台.ReadLine();}publicstaticvoidbroadcast(stringmsg,stringuName,boolflag){foreach(dictionaryEntryIteminclientsList){TcpClientbroadcastSocket;broadcastSocket=(TcpClient)Item.Value;网络流广播流m=broadcastSocket.GetStream();字节[]broadcastBytes=null;if(flag==true){broadcastBytes=Encoding.ASCII.GetBytes(uName+"says:"+msg);}else{broadcastBytes=Encoding.ASCII.GetBytes(msg);}broadcastStream.Write(broadcastBytes,0,broadcastBytes.Length);broadcastStream.Flush();}}//广播函数结束}//结束MainclasspublicclasshandleClinet{TcpClientclientSocket;字符串clNo;哈希表客户列表;publicvoidstartClient(TcpClientinClientSocket,stringclineNo,HashtablecList){this.clientSocket=inClientSocket;this.clNo=clineNo;this.clientsList=cList;线程ctThread=新线程(doChat);ctThread.Start();}privatevoiddoChat(){intrequestCount=0;byte[]bytesFrom=newbyte[10025];字符串dataFromClient=null;字节[]sendBytes=null;字符串serverResponse=null;字符串rCount=null;请求数=0;while((true)){try{requestCount=requestCount+1;NetworkStream网络流=clientS套接字.GetStream();networkStream.Read(bytesFrom,0,(int)clientSocket.ReceiveBufferSize);dataFromClient=System.Text.Encoding.ASCII.GetString(bytesFrom);dataFromClient=dataFromClient.Substring(0,dataFromClient.IndexOf("$"));Console.WriteLine("来自客户端-"+clNo+":"+dataFromClient);rCount=Convert.ToString(requestCount);Program.broadcast(dataFromClient,clNo,true);}catch(Exceptionex){Console.WriteLine(ex.ToString());}}//endwhile}//enddoChat}//endclasshandleClinet}//endnamespace绝对最简单的方法是撕掉你编写的所有代码并在WCF下使用最简单的方法之一是使用安全流原始网络流,例如SslStream或NegotiateStream。SecureStreamsSample中有一个完整的示例,它显示了NTLM/Kerberos和SChannel协议(也称为SSL/TLS)的客户端和服务器。你绝对不应该做的一件事是编写你自己的加密。加密消息很简单,您会在网上找到无数示例。但是创建一个密钥交换协议以便您实际上可以加密一些东西是加密中最困难的任务之一。使用行业认可的密钥交换方案之一,如Kerberos或SSL/TLS,这些方案已在我链接的两个流类中实现。查看这篇文章。它显示了对称加密/解密方法。C#为加密System.Security.Cryptography提供了一个命名空间……你可以先看看它……或者尝试实现像Vernamm这样最简单最简单的加密算法。或者,如果您想要完全安全,则应使用System.Security.Cryptography命名空间和System.Security.Cryptography.X509Certificates命名空间。另外,看看这里:AyncsocketserverwithencryptionandcompressiononCodeProject。以上是C#学习教程:发送消息到服务器时如何加密?你能为我添加一些代码吗,因为我是加密新手?/有什么帮助吗?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: