[英]Socket encrytion form base64string byte array
当我运行它时,有一段注释掉了,它现在是我的解密函数中出现in64basestring错误的方式
使用注释掉temp变量运行时,得到无效的块大小
aes解密功能的第一件事是将base64字符串转换为字符串
我已经测试了加密功能,并且可以正常工作,也已经测试了登录中本地的解密功能,并且可以正常工作
我最近刚开始使用C#,从未使用过套接字
我在这里先向您的帮助表示感谢
私人无效MessageCallBack(IAsyncResult aResult){试试{int size = sck.EndReceiveFrom(aResult,ref epRemote);
if (size > 0)
{
byte[] receivedData = new byte[1464];
receivedData = (byte[])aResult.AsyncState;
//attemp to fix string 64
ASCIIEncoding eEncoding = new ASCIIEncoding();
//UTF8Encoding eEncoding = new UTF8Encoding();
string receivedMessage = eEncoding.GetString(receivedData);
//byte to string
////////////////////////////////////////////////////////////////////////////////////////////////////
//string temp;
/////trying a temp variable
//temp = Convert.ToBase64String(eEncoding.GetBytes(receivedMessage));
//string result = Decrypt(temp);
///////////////////////////////////////////////////////////////////////////////////////////////////////
string result = Decrypt(receivedMessage);
//string result = Decrypt2(receivedMessage);
listMessage.Items.Add("User2: " + (result));
当发送大小为N字节的消息时,发出读取的接收端可以得到:
因此,您可能没有完整的消息,或者只有2条消息的一部分,因此,当您解密时,这就是为什么您会出错的原因。
有两种处理套接字消息的常规方法-带有前缀说明消息长度和消息的前缀。 以及使用定义的定界符指示消息开始/停止的消息。
对于基于前缀的消息,我使用以下类来跟踪接收到的数据:
public class ReceiveState
{
public byte[] Buffer = new byte[1024]; //buffer for network i/o
public int DataSize = 0; //data size to be received by the server
public bool DataSizeReceived = false; //whether prefix was received
public MemoryStream Data = new MemoryStream(); //place where data is stored
public Socket Client; //client socket
}
因此,我接收数据的电话如下所示:
client.BeginReceive(rState.Buffer, 0, rState.Buffer.Length,
SocketFlags.None, new AsyncCallback(socketReadCallBack),
rState);
查看此SO答案以获取有关我使用的代码的更多信息: Socket OnData事件
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.