gpt4 book ai didi

php - 如何使 openssl_encrypt 将输入填充到所需的 block 大小?

转载 作者:可可西里 更新时间:2023-11-01 00:18:54 27 4
gpt4 key购买 nike

如果我手动将字符串填充到 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);

我目前通过 self 填充解决这个问题:

$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

最佳答案

正如 Luke Park 所说,与其明确告诉 openssl_encrypt 使用 OPENSSL_ZERO_PADDING,只需从参数中删除该选项,它将默认为 PKCS #7 padding scheme (用 0x0n 填充 block 的其余部分,其中 n 是必需的字节数;+ 16 0x00 如果 block 已经完成)。 注意:Luke 引用的 PKCS #5 和 PKCS #7 在这种情况下实际上是相同的。

来自 PHP docs :

Without using OPENSSL_ZERO_PADDING, you will automatically get PKCS#7 padding.

所以你应该调用:

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

关于php - 如何使 openssl_encrypt 将输入填充到所需的 block 大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42211778/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com