首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EVP_CIPHER_CTX类型ctx的更新IV (打开SSL1.1.0)

EVP_CIPHER_CTX类型ctx的更新IV (打开SSL1.1.0)
EN

Stack Overflow用户
提问于 2018-10-03 09:40:05
回答 2查看 844关注 0票数 0

我正在将Openssl包升级到1.1.0系列。但是,由于Openssl制造了许多不透明的结构,所以我无法更新特定ctx的iv。

代码语言:javascript
复制
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系列的早期版本中,我使用了

代码语言:javascript
复制
memcpy(nextIv, &ctx.iv, DES3_BLOCK_SIZE);

但是,在将其更改为

代码语言:javascript
复制
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以消除错误?

EN

回答 2

Stack Overflow用户

发布于 2018-10-11 05:14:40

嗯,我仔细研究了Openssl代码,发现

EVP_DecryptInit_ex()

在内部为ctx执行iv的memcpy()。所以做下面的事对我很有帮助。

EVP_DecryptInit_ex(ctx,密码,空,密钥,newIv);

票数 0
EN

Stack Overflow用户

发布于 2020-02-06 08:01:57

在OpenSSL 1.1.0之后,您可以像这样访问ctx->iv。

代码语言:javascript
复制
const unsigned char *EVP_CIPHER_CTX_iv(const EVP_CIPHER_CTX *ctx);
unsigned char *EVP_CIPHER_CTX_iv_noconst(EVP_CIPHER_CTX *ctx);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52624116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档