【问题标题】:OpenSSL EVP_CIPHER_CTX_set_padding not workingOpenSSL EVP_CIPHER_CTX_set_padding 不起作用
【发布时间】:2017-01-06 08:34:28
【问题描述】:

我正在尝试使用 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);

我是不是做错了什么?

【问题讨论】:

  • 我已经为你格式化了你的问题,你可以点击edited <time> ago查看编辑。反引号对于内联代码很有用,不要过度使用引号。

标签: openssl aes padding


【解决方案1】:

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

【讨论】:

  • 实际上,看一下手册页,它确实这么说,但它没有明确说明填充模式等。所以这构成了一个非常好的 Q/A。感谢您的反馈。
  • 花了一个小时调试同样的行为,直到我找到你的答案。非常感谢!
猜你喜欢
  • 2015-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
  • 2020-02-02
  • 2023-04-03
  • 1970-01-01
相关资源
最近更新 更多