Ita*_*vka 3 php encryption padding php-openssl php-7.1
如果我手动将我的字符串填充到32的长度,我的代码就可以工作了.
我的问题是:有没有办法让openSSL填充数据,或者我总是必须为它做这个吗?
工作:
openssl_encrypt ("my baba is over the ocean1111111", 'AES-256-CBC', $MY_SECRET_KEY,OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING,$MY_IV);
Run Code Online (Sandbox Code Playgroud)
不工作:
openssl_encrypt ("my baba is over the ocean", 'AES-256-CBC', $MY_SECRET_KEY,OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING,$MY_IV);
Run Code Online (Sandbox Code Playgroud)
我目前通过自填充来解决这个问题:
$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
Run Code Online (Sandbox Code Playgroud)
正如Luke Park所说,不是明确告诉openssl_encrypt使用OPENSSL_ZERO_PADDING,只需从参数中删除该选项,它将默认为PKCS#7填充方案(填充块的其余部分,0x0n其中n是必需的字节数; + 16,0x00如果块已经完成).注意:Luke和PKCS#7引用的PKCS#5在这种情况下实际上是相同的.
来自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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4329 次 |
| 最近记录: |