Новый Base64 (-1) для Java в PHP?

#java #php #base64

#java #php #base64

Вопрос:

Я пытаюсь сопоставить код java base64 в php. Но получаю противоречивый результат.

Java base64 кодирует

 encMessage = URLEncoder.encode(new Base64(-1).encodeToString(encrypted),"UTF8");
  

Декодирование Java

 message = URLDecoder.decode(message,"utf8");
  

Приведенный выше код java encode code возвращает строку, которую я должен декодировать и расшифровать в php

Декодирование PHP base64

 $message     = utf8_decode(urldecode($encrypted));
$message     = base64_decode($message);
  

PHP кодирует

 $encMessage     = base64_encode($encrypted);
$encMessage     = utf8_encode(urlencode($encMessage));
  

Результаты:
java:

 KO%2F%2B+zbp5z8oCdvZn62jb72kseT+em8hYUZY0IuB9zo= 
  

php:

 KO%2F%2B+zbp5z8oCdvZn62jb3CVVVXsV+ws2kDOmKK%2BPEc=
  

src :https://gist.github.com/944269

Комментарии:

1. В чем ваш вопрос? Что происходит? Можете ли вы показать несколько примеров?

2. Я не вижу никаких результатов:? Обратите внимание, что вы не только кодируете строку в Base64, но и URLEncode, который (afaik) работает немного по-разному на обоих языках. php.net/rawurlencode

3. У вас есть urldecode с обеих сторон в PHP. Это намеренно?

4. При попытке декодировать строки вашего примера я просто вижу кучу байтов, которые даже не являются символами. Все это не имеет особого смысла. Кодировка в base64 всегда безопасна для URL, поэтому нет необходимости в кодировании url (или наоборот). Чего вы пытаетесь достичь?!

5. Какой у вас метод Base64 в Java, по крайней мере, до 1.6.0_18. AFAIK, это не метод, включенный в JDK, это библиотека третьей части? Я не уверен, что base64 «безопасен для URL», но в любом случае нет необходимости выполнять какое-либо кодирование / декодирование UTF8.

Ответ №1:

У меня была эта проблема между CSharp и Java, и я обнаружил, что причиной была кодировка URL-адресов. Что я сделал в своей работе, так это в основном повторно зашифровал данные с помощью недавно сгенерированного открытого ключа, пока не получил тот, который не нуждался в кодировке URL. Не лучшее решение, но оно работает, в среднем требуется 2 попытки, чтобы сделать это правильно, но я видел, что на это уходит до 15 попыток, в любом случае мы все еще говорим о миллисекундах, и это работает надежно.

YMMV

Комментарии:

1. К сожалению, у меня нет контроля над java-стороной. Я должен захватить зашифрованные данные в php, затем расшифровать и base64_decode их. К сожалению, результат очень противоречив. Проверьте тестовую ссылку