I have a working TCP-connection between a server application and a client, wich communicate encrypted with AES. it works with an CryptoStream having an RijndaelManaged En/Decrypter. well Right now, if i want to send sth. like this: "F4FBF-B60FC-6F3ED-1E5A9" i get that as output : "Ü]Þí£ôÉò×â×$¼ÚD-1E5A9" so... what could be going wrong here? why is that still encryptet up to "D-1E5A9"?
Well here some Code: Server:
while (true)
{
Console.Write("Waiting for a connection... ");
TcpClient client = server.AcceptTcpClient();
Console.WriteLine("Connected!");
NetworkStream stream = client.GetStream();
stream.ReadTimeout = System.Threading.Timeout.Infinite;
stream.WriteTimeout = System.Threading.Timeout.Infinite;
byte[] KeyBuffer = new Byte[1510];
stream.Read(KeyBuffer, 0, KeyBuffer.Length);
stream.Flush();
RSACryptoServiceProvider RSAC = new RSACryptoServiceProvider(4096);
RSAC.FromXmlString(bla.GetString(KeyBuffer));
RijndaelManaged RM = new RijndaelManaged();
byte[] RMKeyBuffer = RSAC.Encrypt(RM.Key, true);
stream.Write(RMKeyBuffer, 0, RMKeyBuffer.Length);
stream.Flush();
CryptoStream cs = new CryptoStream(stream, RM.CreateDecryptor(), CryptoStreamMode.Read);
byte[] licence = new byte[23];
cs.Read(licence, 0, licence.Length);
cs.Dispose();
string myConnectionString = "SERVER=Server;" +
"DATABASE=Database;" +
"UID=UID;" +
"PASSWORD=Password;";
MySqlConnection mysqlConn = new MySqlConnection(myConnectionString);
MySqlCommand myComm = mysqlConn.CreateCommand();
myComm.CommandText = "SELET * From lizenzen WHERE Lizenznummer='"+bla.GetString(licence)+"'";
mysqlConn.Open();
}
Client:
private void DoTheThing(string Lizenz)
{
textBox2.Text = "Passed Beginning";
Encoding bla = Encoding.BigEndianUnicode;
Int32 port = 14000;
TcpClient client = new TcpClient("192.168.1.177", port);
NetworkStream stream = client.GetStream();
stream.ReadTimeout = System.Threading.Timeout.Infinite;
stream.WriteTimeout = System.Threading.Timeout.Infinite;
textBox2.Text = "Passed Socket Creation";
RSACryptoServiceProvider RSAC = new RSACryptoServiceProvider(4096);
byte[] Key = bla.GetBytes(RSAC.ToXmlString(false));
stream.Write(Key, 0, Key.Length);
textBox2.Text = "Passed sending KEy";
byte[] encryAES = new byte[512];
stream.Read(encryAES, 0, encryAES.Length);
textBox2.Text = "Passed receiving Encrypted AES Key";
byte[] decryAES = RSAC.Decrypt(encryAES, true);
string decryAesString = string.Empty;
textBox2.Text = "Passed Decryption";
foreach (byte item in decryAES)
{
decryAesString += ((int)item).ToString();
}
textBox1.Text = decryAesString;
RijndaelManaged RM = new RijndaelManaged();
RM.Key = decryAES;
CryptoStream csS = new CryptoStream(stream, RM.CreateEncryptor(), CryptoStreamMode.Write);
byte[] Licence = bla.GetBytes(Lizenz);
csS.Write(Licence,0,Licence.Length);
csS.Flush();
csS.Dispose();
CryptoStream csR = new CryptoStream(stream, RM.CreateDecryptor(), CryptoStreamMode.Read);
byte[] Data = new byte[4096];
csR.Read(Data, 0, Data.Length);
csR.Flush();
csR.Dispose();
textBox3.Text = bla.GetString(Data);
}
sometime, i will begin to use "using" to get rid of the flushes and disposes, but right now, i just tried to get that working and after a long day working on the RSA encryption to get that working, now i got that problem. and if you wonder what encodiung 'bla' is... just imagine whatever you want, it doesn't make a difference.