【发布时间】:2017-07-01 21:27:56
【问题描述】:
如果我手动将字符串填充到 32 的长度,我的代码就可以工作。
我的问题是:有没有办法让 openSSL 填充数据,还是我总是必须这样做?
工作:
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
【问题讨论】:
-
AES 所需的块大小为 16。我猜您选择的 0 填充会使机器感到困惑。
-
你能不故意使用 PKCS5 作为你的填充方案来代替你目前有零填充的地方吗?
-
@LukePark 有内置的方法吗?顺便说一句 -> 请注意我自己填充块而不是零
标签: php encryption padding php-openssl php-7.1