base64字符串字节数组的套接字加密

时间:2013-11-18 01:54:51

标签: c# sockets byte aes

当我按照它的方式运行它时会有一个注释 现在在我的解密函数中得到一个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));

1 个答案:

答案 0 :(得分:0)

当您发送大小为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 event