C # Mono TcpClient Кодирование Windows/Linux

Я написал небольшой частный сервер чата, который я хочу запустить под Linux Ubuntu (Mono). Если я запустил его с Windows, проблем не будет.

OK теперь есть какой-то код.

Это Клиент:

    static void Main(string[] args)
    {
        TcpClient client = new TcpClient();
        client.Connect("192.168.0.1", 8080);
        StreamWriter sw = new StreamWriter(client.GetStream());
        sw.WriteLine(ENCString("Hello World", "123"));
        sw.Flush();
        StreamReader sr = new StreamReader(client.GetStream());
        Console.WriteLine(DECString(sr.ReadLine(), "123"));
        //Output on Console is 'Hello World'
        Console.ReadLine();
    }
    static string ENCString(string clearText, string Password)
    {
        byte[] clearBytes = System.Text.Encoding.Unicode.GetBytes(clearText);
        PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
        byte[] encryptedData = EncryptString(clearBytes, pdb.GetBytes(32), pdb.GetBytes(16));
        return Convert.ToBase64String(encryptedData);
    }
    static private byte[] EncryptString(byte[] clearText, byte[] Key, byte[] IV)
    {
        MemoryStream ms = new MemoryStream();
        Rijndael alg = Rijndael.Create();
        alg.Key = Key;
        alg.IV = IV;
        CryptoStream cs = new CryptoStream(ms, alg.CreateEncryptor(), CryptoStreamMode.Write);
        cs.Write(clearText, 0, clearText.Length);
        cs.Close();
        byte[] encryptedData = ms.ToArray();
        return encryptedData;
    }
    static string DECString(string cipherText, string Password)
    {
        byte[] cipherBytes = Convert.FromBase64String(cipherText);
        PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
        byte[] decryptedData = DecryptString(cipherBytes, pdb.GetBytes(32), pdb.GetBytes(16));
        return System.Text.Encoding.Unicode.GetString(decryptedData);
    }
    static private byte[] DecryptString(byte[] cipherData, byte[] Key, byte[] IV)
    {
        MemoryStream ms = new MemoryStream();
        Rijndael alg = Rijndael.Create();
        alg.Key = Key;
        alg.IV = IV;
        CryptoStream cs = new CryptoStream(ms, alg.CreateDecryptor(), CryptoStreamMode.Write);
        cs.Write(cipherData, 0, cipherData.Length);
        cs.Close();
        byte[] decryptedData = ms.ToArray();
        return decryptedData;
    }

Это сервер:

    static void Main(string[] args)
    {
        TcpListener listener = new TcpListener(IPAddress.Any, 8080);
        listener.Start();
        TcpClient client = listener.AcceptTcpClient();
        StreamReader sr = new StreamReader(client.GetStream());
        string s = DECString(sr.ReadLine(),"123");
        Console.WriteLine(s);
        //Output on Console is 'é¡æ¼¨â§¡æ¾o World'
        StreamWriter sw = new StreamWriter(client.GetStream());
        sw.WriteLine(ENCString(s, "123"));
        sw.Flush();
        Console.ReadLine();
    }
    static string ENCString(string clearText, string Password)
    {
        byte[] clearBytes = System.Text.Encoding.Unicode.GetBytes(clearText);
        PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
        byte[] encryptedData = EncryptString(clearBytes, pdb.GetBytes(32), pdb.GetBytes(16));
        return Convert.ToBase64String(encryptedData);
    }
    private static byte[] EncryptString(byte[] clearText, byte[] Key, byte[] IV)
    {
        MemoryStream ms = new MemoryStream();
        Rijndael alg = Rijndael.Create();
        alg.Key = Key;
        alg.IV = IV;
        CryptoStream cs = new CryptoStream(ms, alg.CreateEncryptor(), CryptoStreamMode.Write);
        cs.Write(clearText, 0, clearText.Length);
        cs.Close();
        byte[] encryptedData = ms.ToArray();
        return encryptedData;
    }
    static string DECString(string cipherText, string Password)
    {
        byte[] cipherBytes = Convert.FromBase64String(cipherText);
        PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
        byte[] decryptedData = DecryptString(cipherBytes, pdb.GetBytes(32), pdb.GetBytes(16));
        return System.Text.Encoding.Unicode.GetString(decryptedData);
    }
    static private byte[] DecryptString(byte[] cipherData, byte[] Key, byte[] IV)
    {
        MemoryStream ms = new MemoryStream();
        Rijndael alg = Rijndael.Create();
        alg.Key = Key;
        alg.IV = IV;
        CryptoStream cs = new CryptoStream(ms, alg.CreateDecryptor(), CryptoStreamMode.Write);
        cs.Write(cipherData, 0, cipherData.Length);
        cs.Close();
        byte[] decryptedData = ms.ToArray();
        return decryptedData;
    }

Что я могу сделать, чтобы исправить это или что я делаю неправильно?

Спасибо за помощь!

0
nl ja de
Это может помочь, если вы сообщите нам, какие ошибки/проблемы вы видите.
добавлено автор Gigi, источник
Почему вы устанавливаете SW дважды ? Что делает ваш читатель? Было бы полезно, если бы вы могли предоставить короткую, но полную программу, демонстрирующую проблему.
добавлено автор Jon Skeet, источник
Нет, но неясно, где вообще шифруется. Опять же, мы не можем больше помогать, не видя больше кода.
добавлено автор Jon Skeet, источник
Шифрование происходит в классе Rijndael. Для вашего вопроса у вас есть ответ в superuser.com/questions/294219/…
добавлено автор user1929959, источник
Привет, я уже нашел проблему. Это был фрагмент шифрования, в котором я использовал Encoding.Unicode для шифрования байтов. Есть ли разница в Unicode между Windows .Net и Linux Mono?
добавлено автор Slangsta, источник
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot