2011-12-13 2 views
0

При получении URL-адреса от приложения iPhone мы расшифровываем строку, созданную в Objective-C, и передаем ее на наш PHP-сайт как переменную GET.Декодирование AES Строки, содержащие пробелы

Мы декодирование с использованием:

mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $padded_key, base64_decode($base64encoded_ciphertext), 'ecb'); 

Который работает отлично большую часть времени, но иногда, мы получаем строку, содержащую пробел, например:

mypage.php?score=IEZrdQ5iUECe9 xyfTY5Cg== 

Тогда неудавшейся расшифровке и мы остались с результатом, как это:

the result http://mattbee.co.uk/temp/mess.png

Кто-нибудь знает, как обрабатывать строки с пробелами в середине, если пространства существуют? Я бы подумал, что кодирование может иметь какое-то отношение к нему, но преобразование в UTF-8/UTF-16 не помогло.

Любые советы очень ценятся.

ответ

2

Данные Base64 содержат пробелы каждые 64 символа и 0-2 знака равенства в конце. Таким образом, приложение iPhone должно запрограммировать процентное кодирование перед отправкой в ​​качестве переменной GET.

0

Вы можете пойти с bin2hex, а затем использовать пакет ('H *', hex) для декодирования строки. Единственная проблема, с которой я знаю, заключается в том, что строка может расти очень большой.

2

Base64 может представлять собой произвольные байты, которые необходимы только для шифрованного текста. Не переделывайте что-нибудь еще.

Некоторые программы вставляют пробелы и разрывы строк в строках с кодировкой base64, поэтому они вписываются в электронные письма и другие форматы ограниченной длины. При декодировании они должны игнорироваться или удаляться.

Если в кодировке base64 есть пробелы, вы можете удалить их перед декодированием, хотя я думаю, что base64_decode должен сделать это автоматически.

Другое примечание. Не используйте ECB-режим, он небезопасен. Используйте CBC-режим (со случайным вектором инициализации, отправленным с сообщением). Или даже лучше, не шифруйте части URL-адреса, вместо этого используйте SSL (или TLS), которые будут обрабатывать все детали для вас.