Иероглифы при создании строки из набора байт

Делаю шифрование строки через xor. Строка в формате UTF-8 на русском языке. После операций не могу восстановить строку в нормальный вид.

    String text = "Какой-нибудь русский текст";
    String sKey = LFSR(); // return string "10011010" for example

    System.out.println("[PSP]: key: " + sKey); // output: 10011010

    byte[] txt = text.getBytes();
    byte[] key = sKey.getBytes();

    byte[] res = new byte[txt.length];

    for (int i = 0; i < txt.length; ++i) {
        res[i] = (byte) (txt[i] ^ key[i % key.length]);
    }

    try {
        System.out.println(new String(res, "UTF-8")); 
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

Вывод в консоль:

 ފ���������������������������������������

P.S. В IDE везде кодировка UTF-8


Ответы (1 шт):

Автор решения: Minepolz320
    String text = "Какой-нибудь русский текст"//ваш код будет работать если тут будет уже >Ранее Зашифрованный< текст
    String sKey = "10011010"; // return string "10011010" for example
    System.out.println("[PSP]: key: " + sKey); // output: 10011010

    byte[] txt = text.getBytes(StandardCharsets.UTF_8);
    byte[] key = sKey.getBytes(StandardCharsets.UTF_8);
    byte[] res = new byte[txt.length];

    // Шифруем текст
    for (int i = 0; i < txt.length; ++i) {
        res[i] = (byte) (txt[i] ^ key[i % key.length]);
    }

    System.out.println("Зашифрованный текст:" + new String(res, StandardCharsets.UTF_8));

    // Расшифровка текста
    for (int i = 0; i < txt.length; ++i) {
        res[i] = (byte) (res[i] ^ key[i % key.length]);
    }

    System.out.println("Расшифрованный текст:" + new String(res, StandardCharsets.UTF_8));
→ Ссылка