gpt4 book ai didi

c# - 通过网络加密字符串,c#

转载 作者:行者123 更新时间:2023-11-30 16:33:28 25 4
gpt4 key购买 nike

我正在尝试创建一个发送和接收字符串的客户端-服务器程序(它是一个简单的 LAN 聊天应用程序)。

程序运行良好,但我需要对其进行加密,这就是问题所在,当我使用加密时,它似乎在每次发送数据后关闭连接,我需要重新运行它才能接收进一步的消息(我不能,因为它在聊天,应该不断)

顺便说一下,即使它是弱加密我也不介意,只要它不是纯文本就可以。

这是我的程序(服务器)的一侧:

public static void Main()
{
string data;
IPEndPoint ip = new IPEndPoint(IPAddress.Any, 9999);

Socket socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);

socket.Bind(ip);
socket.Listen(10);

Socket client = socket.Accept();
IPEndPoint newclient = (IPEndPoint)client.RemoteEndPoint;
Console.WriteLine("Connected with {0} at port {1}",newclient.Address, newclient.Port);

NetworkStream ns = new NetworkStream(client);
StreamReader sr = new StreamReader(ns);
StreamWriter sw = new StreamWriter(ns);

string welcome = "Welcome";
sw.WriteLine(welcome);
sw.Flush();

while(true)
{
data = sr.ReadLine();
Console.WriteLine(data);
sw.WriteLine(data);
sw.Flush();
}
Console.WriteLine("Disconnected from {0}", newclient.Address);
sw.Close();
sr.Close();
ns.Close();
}

这是我尝试用于加密的代码示例:(服务器) IPAddress IP2 = IPAddress.Parse(IP); TcpListener TCPListen = new TcpListener(IP2, 端口);

                TCPListen.Start();

TcpClient TCP = TCPListen.AcceptTcpClient();


NetworkStream NetStream = TCP.GetStream();




RijndaelManaged RMCrypto = new RijndaelManaged();


byte[] Key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16 };
byte[] IV = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16 };




CryptoStream CryptStream = new CryptoStream(NetStream,
RMCrypto.CreateDecryptor(Key, IV),
CryptoStreamMode.Read);

StreamReader SReader = new StreamReader(CryptStream);




message = SReader.ReadToEnd();

textBox3.Clear();

textBox3.Text = message;

CryptStream.Flush();

SReader.Close();







NetStream.Flush();

NetStream.Close();

TCPListen.Stop();
TCP.Close();

我试过只刷新网络流和密码流,这样可以保持连接打开。

最佳答案

您是否考虑过简单地使用 SSL用于您的套接字通信? (指定 SslProtocols.Tls)。

自 C# 2.0 以来,.NET 就支持 SSL 套接字。


如果您想让您的代码与现在的代码基本相同,只需对加密的二进制数据使用编码,这可能会解决您的问题。例如 Convert.ToBase64String 发送前。

关于c# - 通过网络加密字符串,c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3176769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com