У меня есть приложение iOS, которое шифрует строку с помощью [NSData AES128EncryptWithKey:] и отправляет ее по HTTP. Мы не писали приложение и почему это не просто использование HTTPS и вместо этого использование HTTP с AES-128-битным шифрованием - я понятия не имею. Я знаю, что это не идеально, но я работаю с тем, что дал мне клиент, и, прямо сейчас, у меня нет возможности/полномочий исправить это.Расшифровка AES-128-ECB, первый символ расшифровывается до 4 байтов
Мне поручено писать серверное приложение, чтобы принимать эти данные, которые отправляются в виде необработанного бинарного HTTP-сообщения POST и дешифрования тела POST, а затем работают с этими отправленными данными. Я использую PHP, так как это язык, на котором я могу написать серверную сторону быстрее (я изменяю аналогичное серверное приложение, которое уже выполняет ту работу, которая нам нужна для этого. Последнее использование данных не было зашифровано и отправлено через HTTPS)
Когда я дешифрую строку, используя либо mcrypt_decrypt (MCRYPT_RIJNDAEL_128), либо openssl_decrypt (AES-128-ECB), используя предоставленный разработчиком 16-байтовый ключ, первый символ строки расширяется до 4 байтов, все неправильно, и остаток строки расшифровывается просто отлично. Строка начинается с имени пользователя = WHATEVER, а затем за ней стоит около 700 байт других данных (общая длина кратная 16, она правильно заполнена на сервере, насколько я могу это объяснить). Вся строка является правильным, но когда расшифрован, что я получаю:
[email protected]{asername=WHATEVER...
Каждый поиск Я сделал мне говорит о плохих 16 байт при использовании AES-CBC с неправильным IV, но он правильно расшифровывает с ECB - только первый байт ошибочен и расширен до 4 байтов.
Что мне не хватает?
Это звучит как префикс длины. – SLaks
Пожалуйста, добавьте код примера php для дешифрования, включая реальные входные данные и ожидаемое значение дешифрованных данных. – maxhb
Существует две возможности: это дополнение для выравнивания данных до 16 байтов (но обычно оно добавляется в конце алгоритмом), или это индикатор с длиной содержимого для проверки размера, попробуйте прочитать его как двоичное целое. – Gusman