Задать вопрос
daager
@daager

Как дешифровать на PHP, что шифровалось в UTF16?

Есть шифровка, получена простым XOR'ом:
Примерный код на JAVA, шифруя которым получаем полное совпадение
public class HelloWorld {
    public static void main(String[] args)
    {
	    String tmp=xorxor("Проверка","keyyek");
        System.out.println(tmp);
        System.out.println(xorxor(tmp,"keyyek"));
    }

    public static String xorxor(String str, String key) {
            StringBuilder crypt = new StringBuilder();
            for (int i = 0; i < str.length(); i++) {
	        int xor=str.charAt(i) ^ key.charAt(i % key.length());
	         crypt.append((char) xor);
            }
            String result = crypt.toString();
            return result;
    }
}



Расшифровывать надо на PHP, алгоритм повторен, но результат околонулевой:
Дешифратор на PHP
$string="Проверка";

echo xorxor($string,'keyyek');

function xorxor($string,$key){
$res='';
	for($i=0;$i<mb_strlen($string);$i++){
		$part1=mb_substr($string,$i,1);
		$part2=mb_substr($key, $i % mb_strlen($key),1);
 		$res.= $part1 ^ $part2;
	}

	return $res;
}

5be61abc58c1c604667641.jpeg

Понимаю, что дело в char и его utf-16, но на php получить положительный результат не смог.
P.S. На java – пример в обнимку с гуглом, для подтверждения предположения и поиска ошибки.
P.P.S. Не уверен, что правильно сформулировал вопрос.
  • Вопрос задан
  • 153 просмотра
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
daager
@daager Автор вопроса
Таки нашел способ, его еще надо причесать, но работает:
$res .= html_entity_decode("&#".(mb_ord($part1) ^ mb_ord($part2)).";");
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Перевести строку ключа в UTF-16 и xor'ить как однобайтные, через substr. Затем перевести результат в UTF-8.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽