Как работает кроссплатформенное шифрование AES?

Я смог успешно зашифровать и расшифровать AES-256 как в php, так и в коде objective-c. Я не буду публиковать здесь код, так как я перепробовал много разновидностей и ни одна не работает. Я понятия не имею, как работают эти функции шифрования... AES - это стандартизированный алгоритм, поэтому почему он не работает, по моему мнению, сводится к

а) iv
б) некоторая ошибка кодирования
или
c) различия в набивке (должно быть неважно для расшифровки).

Если у кого-то есть функции AES, которые работают и в php, и в objective-c, это было бы замечательно, но если нет, то любая помощь в понимании того, что вызывает такие разные результаты, была бы признательна.

Если вы хотите задать более узкий вопрос, то он касается кодировок, iv и размера блока этого шифра AES.

1) Имеет ли значение, какая кодировка используется с точки зрения ключа и открытого текста/шифротекста? В основном я предполагаю, что это не проблема с открытым текстом, поскольку все символы, которые я буду использовать (по крайней мере, во время тестирования), являются стандартными символами ASCII. Но допустим, строки php - ASCII, а я использую UTF8 в objective-c... Я не знаю достаточно, чтобы сказать, использует ли php ASCII или байты, т.е. ключ, будут отличаться между собой.

2) Насколько мне известно, в режиме ECB не используется iv (поправьте, если не прав). В режиме CBC используется iv. В этом случае ключ должен быть записан вместе с текстом шифра. В php этот ключ имеет длину 16 или 32 символа (в зависимости от размера блока 128 или 256). Это означает 16 или 32 байта? И будет ли строка 1234567890123456789012 одинаковой в ASCII и UTF8 при преобразовании в байты?

3) В чем разница между размером блока и размером ключа с точки зрения алогрифма? (опять же, поправьте, если не прав) По сути, это один и тот же алгоритм, только с разными параметрами? И использование 256-битного ключа против 128-битного - это просто вопрос того, какой ключ передается

(Также, обратите внимание, что я использовал кодировку base64 для передачи строк между приложениями для тестирования)

Спасибо, Elijah

5
задан user1122069 30 December 2011 в 04:39
поделиться