#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=
Комментарии:
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 их. К сожалению, результат очень противоречив. Проверьте тестовую ссылку