@earl_uses

Каким образом можно обратить xor строки в Java, если изначально это была AnsiString из Delphi?

Есть строка, каждый символ которой был обработан xor 54 в Delphi 7.
Я читаю ее из БД в Java. И не могу раскодировать.
Например:
В строке зашифровано слово 'Осложнения'

String s = "шЗЭШРЫУЫЮЙ";
        String s2 = "";
        for (int i = 0; i < s.length(); i++) {
            int tmp = s.charAt(i);
            s2 += (char)(tmp ^ 54);
        }
        System.out.println(s2);


На выходе 'ѾСЛОЖНЕНИЯ' и это мой лучший результат!
Как быть?
  • Вопрос задан
  • 300 просмотров
Решения вопроса 1
longclaps
@longclaps
Вот питон3, явы, прости, не знаю
bb = bytearray("шЗЭШРЫУЫЮЙ".encode('WINDOWS-1251'))
for i in range(len(bb)):
    bb[i] ^= 54
print(bb.decode('WINDOWS-1251'))  # Осложнения

можешь попробовать сделать таблицу перекодировки:
цчфхтурсюяьэъышщжздевгабопмнклийћЦЧФХТУРСЮЯЬЭЪЫШЩЖЗДЕВГАБОПМНКЛИЙЋ
АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯЁабвгдежзийклмнопрстуфхцчшщъыьэюяё
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@earl_uses Автор вопроса
Сделал через строки перекодировки
public static String xor54Str(String s) {
        String sourcePattern = "ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ";
        String resultPattern = "ЋЯАЕЬУЫХОПСГМВНФЦЩЖШЭТРЛЙБЗЪЮДКЧИћяаеьуыхопсгмвнфцщжшэтрлйбзъюдкчи";

        StringBuilder res = new StringBuilder();
        for (int i = 0; i < s.length(); i++) {
            int j = resultPattern.indexOf(s.charAt(i));
            if (j == - 1) {
                int tmp = s.charAt(i);
                res.append((char) (tmp ^ 54));
            }
            else {
                res.append(sourcePattern.charAt(j));
            }
        }

        return res.toString();
    }
Ответ написан
Комментировать
@private_tm
JAVA dev
Используйте указание кодировки при конвертации строк в байты и обратно. Например:

byte[] arr =str.getBytes("WINDOWS-1251");
и соответственно

String str = new String(arr, "WINDOWS-1251");
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы