Как сделать, чтобы openssl_encrypt дополнял вход до требуемого размера блока?

Мой код работает, если я вручную дополняю строку длиной до 32.
Мой вопрос: есть ли способ сделать openSSL pad данными или мне всегда нужно это делать?

За работой:

 openssl_encrypt ("my baba is over the ocean1111111", 'AES-256-CBC', $MY_SECRET_KEY,OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING,$MY_IV);

Не работает:

openssl_encrypt ("my baba is over the ocean", 'AES-256-CBC', $MY_SECRET_KEY,OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING,$MY_IV);

Я решаю это в настоящее время путем самостоятельного заполнения:

$pad = 32 - (strlen("my baba is over the ocean") % 32);
$clear = "my baba is over the ocean" . str_repeat(chr($pad), $pad); //encrypt this string

3

Решение

Как сказал Люк Парк, вместо того, чтобы явно рассказывать openssl_encrypt использовать OPENSSL_ZERO_PADDINGпросто удалите эту опцию из параметра, и она по умолчанию будет PKCS # 7 схема заполнения (заполняет остальную часть блока 0x0n где N количество необходимых байтов; + 16 0x00 если блок уже завершен). Примечание: PKCS # 5, на который ссылаются Luke и PKCS # 7, фактически идентичны в этом сценарии.

От PHP документы:

Без использования OPENSSL_ZERO_PADDING вы автоматически получите заполнение PKCS # 7.

Так что вы должны звонить:

openssl_encrypt("my baba is over the ocean", 'AES-256-CBC', $MY_SECRET_KEY, OPENSSL_RAW_DATA, $MY_IV);
6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]