我的代码如果我手动填充我的字符串长度为32的作品。
我的问题是:有没有办法让openSSL填充数据,或者我总是必须为它做?如何使openssl_encrypt将输入填充到所需的块大小?
工作:
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填充的选择是混淆的机制。 – jww
你可不是故意使用PKCS5作为你的填充方案来代替你现在有零填充的地方吗? –
@LukePark有没有内置的方法来做到这一点?顺便说一句 - >注意我自己垫块,而不是零 –