Rijandeal и специальные символы - PullRequest
2 голосов
/ 15 апреля 2019

Я использую Rijandeal для enc./dec. и я заметил, что некоторые специальные символы не правильно управляются.

Вот код:

    static void Main(string[] args)
    {        
        string enc = RijanENC("šđčćž");
        string dec = RijanDEC(enc);

        Console.WriteLine(dec);
        Console.ReadKey();
    }

    private static string RijanENC(string texto_puro)
    {
        byte[] key = System.Text.Encoding.Default.GetBytes("123abc12");
        byte[] iv = System.Text.Encoding.Default.GetBytes("0123456789abcdef");
        byte[] stringToEncrypt = System.Text.Encoding.UTF32.GetBytes(texto_puro);


        Rijndael rjnAlg = Rijndael.Create();
        System.IO.MemoryStream ms = new MemoryStream();
        CryptoStream cs = new CryptoStream(ms, rjnAlg.CreateEncryptor(key, iv), CryptoStreamMode.Write);
        cs.Write(stringToEncrypt, 0, stringToEncrypt.Length);
        cs.FlushFinalBlock();
        return Convert.ToBase64String(ms.ToArray());
    }

    private static string RijanDEC(string texto_encriptado)
    {
        byte[] key = System.Text.Encoding.Default.GetBytes("123abc12");
        byte[] iv = System.Text.Encoding.Default.GetBytes("0123456789abcdef");
        byte[] stringToDecrypt = new byte[texto_encriptado.Length];


        Rijndael rjnAlg = Rijndael.Create();
        MemoryStream ms = new MemoryStream();
        CryptoStream cs = new CryptoStream(ms, rjnAlg.CreateDecryptor(key, iv), CryptoStreamMode.Write);
        stringToDecrypt = Convert.FromBase64String(texto_encriptado);
        cs.Write(stringToDecrypt, 0, stringToDecrypt.Length);
        cs.FlushFinalBlock();

        Encoding encoding = Encoding.UTF32;
        return encoding.GetString(ms.ToArray());
    }

Итак, текст, который я хочу в кодировке. содержит некоторые диакритические знаки šđčćž. После декодирования я получаю sdccz вместо этого, даже если использую UTF32.

1 Ответ

1 голос
/ 15 апреля 2019

Код для шифрования / дешифрования работает должным образом, проблема с выводом на консоль.

Установите outputEncoding для отображения символов в правильной кодировке

Console.OutputEncoding = System.Text.Encoding.UTF8;
Console.WriteLine(dec);
Console.ReadKey();
...