несоответствие декодирования / кодирования base64

Я пытаюсь провести обратное проектирование приложения с кодировкой base64, которое используется сторонним проектом, чтобы я мог создать пользовательский интерфейс. Мой метод был успешным с одним примером, но, похоже, не совсем подходит к другим примерам (несколько символов, которые не совсем верны).

AQAAAAAAGQBec2lwOigwMjAxMjM0NTZbMC05XSspQC4qFwBzaXA6MDIwMTIyMTEzQDEyNy4wLjAuMQAA

^^ фактическая кодировка base64 в базе данных

AQAAAAAAEABec2lwOigwMjAxMjM0NTZbMC05XSspQC4qEwBzaXA6MDIwMTIyMTEzQDEyNy4wLjAuMQoA

^^ Лучшая попытка сопоставить с методом PHP

Из-за управляющих символов я реализовал некоторую кодировку json, чтобы упростить идентификацию строк, которые используются для переменных. Строки соответствуют для этого примера, но результат кодирования base64 отличается от фактического, который ожидается.

$actualfour = 'AQAAAAAAGQBec2lwOigwMjAxMjM0NTZbMC05XSspQC4qFwBzaXA6MDIwMTIyMTEzQDEyNy4wLjAuMQAA';
echo "".$actualfour;
echo "<br />";

$four = chr(01);
$four .= chr(00);
$four .= chr(00);
$four .= chr(00);
$four .= chr(00);
$four .= chr(00);
$four .= chr(16);
$four .= chr(00);
$four .= '^sip:(020123456[0-9]+)@.*';
$four .= chr(19);
$four .= chr(00);
$four .= 'sip:[email protected]
'.chr(00);

$jsonfour = json_encode($four);
echo "unencoded: ".$jsonfour;
echo "<br />";
$encodefour = base64_encode($four);
echo "".$encodefour;
echo "<br />";
$jsonencodefour = json_encode(base64_decode($encodefour));
echo "encoded: ".$jsonencodefour;
echo "<br />";

if ($encodefour != $actualfour) { echo "FAIL"; } else { echo "PASS"; }

^^ Метод кода

AQAAAAAAGQBec2lwOigwMjAxMjM0NTZbMC05XSspQC4qFwBzaXA6MDIwMTIyMTEzQDEyNy4wLjAuMQAA
unencoded: "\u0001\u0000\u0000\u0000\u0000\u0000\u0010\u0000^sip:(020123456[0-9]+)@.*\u0013\u0000sip:[email protected]\n\u0000"AQAAAAAAEABec2lwOigwMjAxMjM0NTZbMC05XSspQC4qEwBzaXA6MDIwMTIyMTEzQDEyNy4wLjAuMQoA
encoded:   "\u0001\u0000\u0000\u0000\u0000\u0000\u0010\u0000^sip:(020123456[0-9]+)@.*\u0013\u0000sip:[email protected]\n\u0000"FAIL

^^ Вывод

0

Решение

У вас есть несколько ошибок в $four,

  • chr(16) должно быть chr(0x19) или же chr(25)
  • chr(13) должно быть chr(0x17) или же chr(23)
  • Новая строка после 127.0.0.1 должно быть chr(00)

Вот правильный $four:

$four = chr(01);
$four .= chr(00);
$four .= chr(00);
$four .= chr(00);
$four .= chr(00);
$four .= chr(00);
$four .= chr(0x19);
$four .= chr(00);
$four .= '^sip:(020123456[0-9]+)@.*';
$four .= chr(0x17);
$four .= chr(00);
$four .= 'sip:[email protected]'.chr(00).chr(00);

Вы можете найти все эти несоответствия, сравнивая json_encode(base64_decode($actualfour)) с json_encode($four), Помните, что когда он показывает управляющий символ как \u#### что число шестнадцатеричное, а не десятичное.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]