Иероглифы при создании строки из набора байт
Делаю шифрование строки через 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));