Задать вопрос
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. Не уверен, что правильно сформулировал вопрос.
  • Вопрос задан
  • 149 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
daager
@daager Автор вопроса
Таки нашел способ, его еще надо причесать, но работает:
$res .= html_entity_decode("&#".(mb_ord($part1) ^ mb_ord($part2)).";");
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Перевести строку ключа в UTF-16 и xor'ить как однобайтные, через substr. Затем перевести результат в UTF-8.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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