OpenSSL EVP\u密码\u CTX\u集合\u填充不工作

OpenSSL EVP\u密码\u CTX\u集合\u填充不工作,openssl,aes,padding,Openssl,Aes,Padding,我正在尝试使用EVP接口使用AES、CBC和PKCS#7填充进行加密/解密。我在用电脑 在创建和初始化上下文后,我正在执行EVP\u CIPHER\u CTX\u set\u padding(CTX,0),如果明文不是16字节的倍数,则不应添加填充并失败。尽管如此,密文始终包含仅由填充组成的额外块 我使用的代码是从教程中复制和粘贴的,我只是在加密和解密中添加了EVP\u CIPHER\u CTX\u set\u padding(CTX,0),如下所示: /* Create and initial

我正在尝试使用EVP接口使用AES、CBC和PKCS#7填充进行加密/解密。我在用电脑

在创建和初始化上下文后,我正在执行
EVP\u CIPHER\u CTX\u set\u padding(CTX,0)
,如果明文不是16字节的倍数,则不应添加填充并失败。尽管如此,密文始终包含仅由填充组成的额外块

我使用的代码是从教程中复制和粘贴的,我只是在加密和解密中添加了
EVP\u CIPHER\u CTX\u set\u padding(CTX,0)
,如下所示:

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

我做错了什么吗?

显然
EVP\u DecryptInit\u ex
EVP\u EncryptInit\u ex
都会重新初始化上下文,以便任何上下文更改(例如设置填充)应该在调用这些方法后执行。

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

实际上,查看手册页,它确实说,但是它没有明确说明任何关于填充模式等的内容。所以这构成了一个非常好的Q/a。感谢您的回复。我花了一个小时调试了同样的行为,直到找到您的答案。。谢谢!事实上,看看手册页,它确实是这么说的,但它没有明确说明任何关于填充模式等的内容。所以这构成了一个非常好的Q/a。感谢您的回复。我花了一个小时调试了同样的行为,直到找到您的答案。。谢谢!我已经为您设置了问题格式,您可以通过单击查看编辑。反勾号对于内联代码很有用,不要过度使用引号。我已经为您设置了问题的格式,您可以通过单击查看编辑。反勾号对于内联代码很有用,不要过度使用引号。