Hi
Im trying to make a Client/Server where im going to encrypt the stream but i cant get it to work. I can recieve and send as long as im not trying to send/recieve encrypted. but when i am i cant send, recieve or both.
The Send/Recieve Code is the same on both Server and client.
Send/Recieve Code:
private Stream Net()
{
if(Encrypted)
{
CryptoStream SecStream = new CryptoStream(Ne tStream,TDes.Cr eateDecryptor() ,CryptoStreamMo de.Read);
return SecStream;
}
else
return NetStream;
}
private void GetStreamData(I AsyncResult ar)
{
int intCount;
try
{
lock(Net())
{
intCount = Net().EndRead(a r);
}
if(intCount<1)
{
Client.Close();
if(Disconnected !=null)
{
EventArgs e = new EventArgs();
Disconnected(th is, e);
}
}
BuildData(recBy te,0,intCount);
AsyncCallback GetStreamDataCa llback = new AsyncCallback(G etStreamData);
Net().BeginRead (recByte,0,1024 ,GetStreamDataC allback,null);
}
catch
{
Client.Close();
if(Disconnected !=null)
{
EventArgs e = new EventArgs();
Disconnected(th is, e);
}
}
}
public void Send(string Data)
{
StreamWriter Writer;
if(Encrypted)
{
CryptoStream SecStream = new CryptoStream(Ne tStream,TDes.Cr eateEncryptor() ,CryptoStreamMo de.Write);
Writer = new StreamWriter(Se cStream);
}
else
Writer = new StreamWriter(Ne tStream);
Writer.Write(Da ta);
Writer.Flush();
}
Code Server:
private void BuildData(byte[] Databyte, int offset, int count)
{
string Data = Encoding.UTF8.G etString(Databy te, offset, count);
string[] DataCmd = Data.Split(':') ;
if(!Encrypted)
{
switch(DataCmd[0])
{
case "HELO":
{
Send("Welcome") ;
break;
}
case "DesKey":
{
TDes.GenerateKe y();
DesKey = TDes.Key;
Send("DesKey:" + Convert.ToBase6 4String(DesKey) );
break;
}
case "DesIV":
{
TDes.GenerateIV ();
DesIV = TDes.IV;
Send("DesIV:" + Convert.ToBase6 4String(DesIV)) ;
Encrypted = true;
break;
}
}
}
else
{
Send(Data);
}
}
Code Client:
private void BuildData(byte[] Databyte, int offset, int count)
{
string Data = Encoding.UTF8.G etString(Databy te, offset, count);
string[] DataCmd = Data.Split(':') ;
if(!Encrypted)
{
switch(DataCmd[0])
{
case "Welcome":
{
txtDataRx.Text = "Connected" ;
break;
}
case "DesKey":
{
//txtDataRx.Text = DataCmd[1];
DesKey = Convert.FromBas e64String(DataC md[1]);
TDes.Key = DesKey;
break;
}
case "DesIV":
{
//txtDataRx.Text = DataCmd[1];
DesIV = Convert.FromBas e64String(DataC md[1]);
TDes.IV = DesIV;
Encrypted = true;
break;
}
}
}
else
{
txtDataRx.Text = Data;
}
}