繁体   English   中英

套接字加密形式为base64string字节数组

[英]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字节的消息时,发出读取的接收端可以得到:

  • 少于N个字节
  • N字节
  • 超过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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM