当我按照它的方式运行它时会有一个注释 现在在我的解密函数中得到一个in64basestring错误
当运行带有注释的临时变量时,我得到了 Invailid块大小
通过aes解密功能完成的第一件事 从base 64 string转换我测试了加密功能,但它确实有效 我也测试了解密功能 在我的登录本地,它的工作原理
我刚刚开始使用C# 并且从未使用套接字
感谢您的帮助
private void 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));
答案 0 :(得分:0)
当您发送大小为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 event