Обратимый xor на php

360
19 февраля 2017, 11:56

Здравствуйте! Нужна ваша помощь в решении одной задачки.
Есть три переменные:

$a = 16431130;
$b = 15318085;
$c = 8860504;
$result = $a ^ $b ^ c;

В конце известно 2 значения, переменная $result и переменная $c. Скажите, как из этих 2 переменных получить переменные $a и $b. Как лучше изменить
$result = $a ^ $b ^ c;
чтобы получить нужный результат?

Answer 1

Судя по всему вы хотите взломать Шифр Вернама. Он используется военными для передачи сверх секретной информации и без знания ключа его не взломать. Если получится - напишите сюда - вы привнесете неоценимый вклад в криптографию. В вашем случае можно лишь получить результат $a ^ $b вот так:

function myXor($c,$result){
   return $result^$c;
}
Answer 2

Как лучше изменить...

Можно хранить a и b в разных битах.

$result = ($a << 32 | $b) ^ $c;

Вот код:

$a = 12345;
$b = 65432;
$c = 723648723;
$res = ($a << 32 | $b) ^ $c;
$ab = $res ^ $c;
$b = ($res ^ $c) % (1 << 32) | 0;
$a = ($res ^ $c) / (1 << 32) | 0;
var_dump([$a, $b]); 

Результат:

array(2) {
  [0]=>
  int(12345)
  [1]=>
  int(65432)
}

К сожалению, при недостаточно большом $c значение $a будет представлено в открытом виде. Необходимо выбирать $c, как случайное 64битное число. $a и $b в свою очередь, ограничены 32битным диапазоном.

READ ALSO
Загрузка аудиозаписи в вк,через api

Загрузка аудиозаписи в вк,через api

Доброго времени суток! Мне необходимо загрузить аудиофайл (wav) в документы ВКонтакте

386
Не выполняется код в сокращенной версии тега PHP

Не выполняется код в сокращенной версии тега PHP

Обновил сервер и теперь код обернутый в <? ?> перестал выполнятьсяКак подправить?

375
Проблема с правами доступа

Проблема с правами доступа

В силу логики проекта, мне нужно дать пользователям возможность работать с файлами в одной конкретной папке на сервере(создавать, изменять,...

326
Не работает click() в chrome 56v

Не работает click() в chrome 56v

Не работает переопределенный onClick() (заходит в if, вызывает click(), но ничего не происходит) в браузере Chrome версии 56:

356