openssl - 如何更新 EVP_CIPHER_CTX 类型的 ctx 的 IV(打开 ssl 1.1.0)
问题描述
我正在将我的 Openssl 包升级到 1.1.0 系列。但是,由于 Openssl 使许多结构变得不透明,我无法更新特定 ctx 的 iv。
EVP_CIPHER_CTX *ctx; // This was EVP_CIPHER_CTX ctx; for version 1.0.x series
EVP_DecryptInit(ctx, cipher, keydata, iv);
对于特定情况,我需要更新 iv。在早期版本的 openssl 1.0.x 系列中,我用
memcpy(nextIv, &ctx.iv, DES3_BLOCK_SIZE);
但是在将其更改为
memcpy(nextIv, ctx->iv, DES3_BLOCK_SIZE);
我收到编译器错误
错误:取消指向不完整类型“EVP_CIPHER_CTX”的指针 {aka 'struct evp_cipher_ctx_st'} memcpy(nextIv, ctx->iv, DES3_BLOCK_SIZE);
我认为这是因为结构已变得不透明。
我可以用什么替换memcpy
语句来更新 ctx 的 iv 以消除错误?
解决方案
在 OpenSSL 1.1.0 之后,您可以像这样访问 ctx->iv。
const unsigned char *EVP_CIPHER_CTX_iv(const EVP_CIPHER_CTX *ctx);
unsigned char *EVP_CIPHER_CTX_iv_noconst(EVP_CIPHER_CTX *ctx);
推荐阅读
- c# - 如何为树枝上的每个祖先项设置属性?
- reactjs - 如何强制用户注销 Service Worker?
- asterisk - Asterisk 16 w/ PJSIP - 转发呼入时“每个人都忙/拥塞”
- azure - 使用 Azure 门户使用 API 管理配置应用程序网关
- java - Spring中的HTTP请求是如何解码的?
- python - 在 Python 中迭代行时比较列并增加值
- reactjs - Redux-saga dispatch 返回这么多请求
- python - 在 Python 中使用 7zip 压缩时如何不包含整个路径?
- javascript - 如何使用 javascript 在 div 中移动对象?
- api - 反应原生 jwt auth 基本 api