OpenSSL EVP_CIPHER_CTX_set_padding 不工作

OpenSSL EVP_CIPHER_CTX_set_padding not working

我正在尝试 encrypt/decrypt 使用 EVP 接口使用 AES、CBC 和 PKCS#7 填充。我正在使用 example found on the Wiki.

我在创建和初始化上下文后正在做 EVP_CIPHER_CTX_set_padding(ctx, 0),如果明文不是 16 字节的倍数,则不应添加填充并失败。尽管如此,密文总是包含一个仅由填充组成的额外块。

我使用的代码是从教程中复制和粘贴的,我只是在加密和解密中添加 EVP_CIPHER_CTX_set_padding(ctx, 0),如下所示:

/* Create and initialise the context */
if (!(ctx = EVP_CIPHER_CTX_new())) handleErrors();
EVP_CIPHER_CTX_set_padding(ctx, 0);

我是不是做错了什么?

显然 EVP_DecryptInit_exEVP_EncryptInit_ex 都重新初始化上下文,因此任何上下文更改(例如设置填充)都应在调用这些方法后执行。