Поскольку Магнус указывает , ключ и IV должны быть определенного размера для AES в режиме CBC. Размер ключа должен быть 32 байта для AES-256, а IV идентичен размеру блока: 16 байтов.
Обычно любой язык проверяет размер ключа и IV перед его использованием, но PHP имеет неприятную привычку (как для OpenSSL, так и для mcrypt API) заполнять его нулями, если он слишком мал или вырезать его часть когда он слишком большой. Вероятно, это связано с тем, что лежащие в основе C-библиотеки не проверяют размер, поскольку ключ и IV передаются как указатели, а не как массивы или объекты.
Чтобы исправить это, вы должны убедиться, что ключ содержит ровно 32 рандомизированных байта (очевидно, это потому, что предупреждения нет) и что IV состоит из ровно 16 рандомизированных байтов.
Обратите внимание, что требование безопасности для режима CBC, что IV состоит из 16 байтов, которые полностью непредсказуемы для противника. Поэтому не рекомендуется просто исправлять ошибку, добавляя IV к нулям самостоятельно. Хотя использование 7 байтов в качестве IV вряд ли приведет непосредственно к эксплойтам, вам следует исправить протокол , а не полагаться на обходные пути в коде .
Как указано, другие криптографические API (для разных языков) будут строго предписывать использовать ключи и IV правильного размера; если вы продолжаете использовать 7-байтовый IV, то для всех этих сред выполнения могут потребоваться обходные пути.