Расшифровка строк AES, содержащих пробелы - PullRequest
0 голосов
/ 13 декабря 2011

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

Мы декодируем с помощью:

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

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

mypage.php?score=IEZrdQ5iUECe9 xyfTY5Cg==

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

результат http://mattbee.co.uk/temp/mess.png

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

Любой совет, который высоко ценится.

Ответы [ 3 ]

2 голосов
/ 14 декабря 2011

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

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

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

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

2 голосов
/ 13 декабря 2011

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

0 голосов
/ 13 декабря 2011

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

...