Android не может декодировать код PHP base64

Я пытаюсь декодировать свой код Base64, закодированный моим сервером PHP, он работает и будет нормально декодироваться с помощью PHP, но когда я пытаюсь закодировать его через свой телефон Android, я получаю следующую ошибку:

Base64DecoderException: encoded value has invalid trailing byte

Мой код Base64:

oLAwb6uSn2JXqAFTX+qJXaOawOYF3kDDK2HlCb7ItCeimVCsDE7OYH5OgsixKpIAM6KgkCktnB4HsLQtA5Ig1fQvDrRcct9dQi4m8wPpF7a3sFHSG29j2aItKeouflTtsSZgKWvSjg0gBBGM/7PlvkuK+8W4/GXS0QrqV1jcngWrspYmAdi0GiJbPm8b/zlscOIa1z1df11SuQH5+GiUzqZ4WDFOpoH0WWVW3KmbMQ2yifBmXnhn80qZct6KiN7aL8PHEczhNrRqAKfUuEwmsWOnEOyh7UOU6FcnW3VAo2BWd5dJRGgWb5Py09l0XmrdWdzin7klKtMqXOWQRcvEVT7PKtQxQotRpOa+2IQQirVfybyuMipY9YORuW1hqmc95Tdt1WHdIzVwEtq6NXx9AC5mSklbxrcOpINfS2RPFcK0UUMV2xQKAQ+u8PzTj/KBEmb04ObBbnX6y3uL1KT58lDecA9lIbNYuttlgRMzRdxFOvkk21wou2vtMBtIxk0XFJJGjazqqcxVeSxTvQ68wdNSkRmvteowkSq2Vi09CmOhToRHemFyZgKTxSBoNaFuVuYGVggEFIR9kHVrLxoK2Q==

Любые идеи?


person iSun    schedule 10.09.2013    source источник
comment
Ну, это ваши данные base64 - теперь как вы их передаете на телефон, и как выглядит ваш Java-код?   -  person Jon Skeet    schedule 11.09.2013
comment
Держу пари, что «неверный конечный байт» — это \n. опубликуйте свой код.   -  person Sammitch    schedule 11.09.2013
comment
Что именно находится в этой строке base64? Когда я копирую/вставляю его в 3 разных декодера онлайн, я получаю тарабарщину.   -  person Jonathan Kuhn    schedule 11.09.2013
comment
@JonSkeet Обновите мой вопрос, указав более подробную информацию.   -  person iSun    schedule 11.09.2013
comment
@JonathanKuhn Это потому, что это AES зашифрованный байт, проверьте мои обновленные вопросы, пожалуйста.   -  person iSun    schedule 11.09.2013
comment
@Sammitch Пожалуйста, проверьте мой обновленный вопрос с опубликованными кодами.   -  person iSun    schedule 11.09.2013
comment
Я уверен, что все ваше шифрование/кодирование в порядке, проблема, скорее всего, заключается в фактическом выводе данных. Посмотрите ответ @ jay-sheth ниже и попробуйте простой s.trim() на входе в вашем коде Java, чтобы удалить любые оскорбительные пробелы.   -  person Sammitch    schedule 11.09.2013
comment
Вы не передаете какое-либо смещение методу doFinal, не заканчивается ли возвращаемая строка некоторыми нулевыми байтами?   -  person dev-null-dweller    schedule 11.09.2013
comment
Почему вы вообще конвертируете свою строку в байты? Используйте 1_. (И, конечно, обрезать разрыв строки.) И всегда указывать кодировку при преобразовании байтов в строку (вызов конструктора String).   -  person Jon Skeet    schedule 11.09.2013


Ответы (1)


если недопустимый завершающий байт является возвратом каретки (\n), самым простым решением было бы пропустить закрывающий тег PHP (во всех ваших файлах PHP):

<?php
//Code goes here
//Leave out the closing tag: ?>

В противном случае вы можете обрезать окружающие пробелы и возвраты каретки (в вашем коде Java) до того, как вы декодируете его base64.

person Jay Sheth    schedule 10.09.2013
comment
Вах.. Вах.. Вах... ВААААХ.... ДЖЕЙ.. Большое вам спасибо... Я чуть не покончил жизнь самоубийством, не зная решения... Спасибо.. - person Abdul Saleem; 03.10.2015
comment
\n не является символом возврата каретки. \r — символ возврата каретки. \n — символ перевода строки. stackoverflow.com/ вопросы/3091524/ - person Achille; 28.12.2017