我正在将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以消除错误?
发布于 2018-10-11 05:14:40
嗯,我仔细研究了Openssl代码,发现
EVP_DecryptInit_ex()
在内部为ctx执行iv的memcpy()。所以做下面的事对我很有帮助。
EVP_DecryptInit_ex(ctx,密码,空,密钥,newIv);
发布于 2020-02-06 08:01:57
在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);https://stackoverflow.com/questions/52624116
复制相似问题