Intereting Posts
используя $ this или parent :: для вызова унаследованных методов? Создавайте числа в массиве, которые суммируются до заданной суммы Динамическая маршрутизация в приложении Laravel 5 Функция почты PHP не может отправлять электронную почту, когда я добавил .com.sg, а не только .com Неустранимая ошибка: Недостаточно памяти (выделено 1134559232) (попытался выделить 32768 байт) в X: \ wamp \ www \ xxx Данные $ _POST возвращаются пустым, если заголовки> POST_MAX_SIZE как присоединиться к двум таблицам в mongodb реализовать запрос LIKE в PDO unlink PHP работает, когда файл находится в корне, а не если файл находится в папке Как предотвратить файл HotLink из Internet Download Manager IDM Переменная класса объекта PHP Имена файлов UTF8 в PHP и различные кодировки Unicode Как создать несколько массивов PHP в функции для параметров, переданных по ссылке? PHP получает абсолютный URL-адрес сайта на сервере? PHP MVC – Как контроллер и просмотр могут обращаться к одному экземпляру модели?

PHP base64 encode не декодируется Android

У меня есть PHP-скрипт, который создает QR-код из имени пользователя и метки времени. Мне нужно доказать, что QR-код пришел с моего сервера, поэтому я шифрую имя пользователя и временную метку с помощью частного ключа RSA. Чтобы получить его в QR-код, я тогда кодирую его base64.

Сначала я тестирую его с Android. Я могу получить строку из QR-кода, но когда я base64 декодировал его в Android, он возвращает null. После отладки это похоже на то, что в строке есть два пробела. Когда декодер приходит, чтобы проверить, что незаконные символы делятся на 4, он, очевидно, терпит неудачу. Отчаявшись, я удалил пробелы, но потом изменил длину, поэтому расчеты все еще не сработали. Могу ли я изменить пробел для «безопасного» символа? Или конкретная пара кодирования / декодирования несовместима?

PHP-код:

$data = base64_encode($username."`".$timestamp); $fp = fopen("private.pem", "r"); $private_key = fread($fp, 8192); fclose($fp); openssl_private_encrypt($data, &$encrypted_data, $private_key); $encrypted_data_64 = base64_encode($encrypted_data); // create QR code 

Код Android:

 String s = data.getStringExtra("SCAN_RESULT"); byte[] b = Base64.decode(s.toCharArray()); // b is null at this point 

Код Base64, который он испугает:

 // Check special case int sLen = str != null ? str.length() : 0; if (sLen == 0) return new byte[0]; // Count illegal characters (including '\r', '\n') to know what size the returned array will be, // so we don't have to reallocate & copy it later. int sepCnt = 0; // Number of separator characters. (Actually illegal characters, but that's a bonus...) for (int i = 0; i < sLen; i++) // If input is "pure" (Ie no line separators or illegal chars) base64 this loop can be commented out. if (IA[str.charAt(i)] < 0) sepCnt++; // Check so that legal chars (including '=') are evenly divideable by 4 as specified in RFC 2045. if ((sLen - sepCnt) % 4 != 0) return null;