2016-06-10 12 views
0

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

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:(02[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:(02[0-9]+)@.*\u0013\u0000sip:[email protected]\n\u0000" 
AQAAAAAAEABec2lwOigwMjAxMjM0NTZbMC05XSspQC4qEwBzaXA6MDIwMTIyMTEzQDEyNy4wLjAuMQoA 
encoded: "\u0001\u0000\u0000\u0000\u0000\u0000\u0010\u0000^sip:(02[0-9]+)@.*\u0013\u0000sip:[email protected]\n\u0000" 
FAIL 

^^ Выход

ответ

1

У вас есть несколько ошибок в $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:(02[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####, число будет шестым, а не десятичным.

 Смежные вопросы

  • Нет связанных вопросов^_^