首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“OpenSSL”错误:“ctx”的存储大小未知“

“OpenSSL”错误:“ctx”的存储大小未知“
EN

Stack Overflow用户
提问于 2019-05-05 12:37:17
回答 1查看 5.5K关注 0票数 3

我使用的是Ubuntu19.04和(据称) OpenSSL 1.1.1b,但是在使用EVP_MD_CTX时,我在编译本应工作的代码时遇到了这个问题。我玩过OpenSSL (尝试手动更新18.04),但是(据我所知)成功卸载/重新安装(据我所知),因为它现在显示了上述版本。

代码语言:javascript
运行
复制
#include <stdio.h>
#include <openssl/evp.h>

main(int argc, char *argv[])
{
EVP_MD_CTX mdctx;
const EVP_MD *md;
char mess1[] = "Test Message\n";
char mess2[] = "Hello World\n";
unsigned char md_value[EVP_MAX_MD_SIZE];
int md_len, i;

OpenSSL_add_all_digests();

md = EVP_get_digestbyname(argv[1]);

EVP_MD_CTX_init(&mdctx);
EVP_DigestInit_ex(&mdctx, md, NULL);
EVP_DigestUpdate(&mdctx, mess1, strlen(mess1));
EVP_DigestUpdate(&mdctx, mess2, strlen(mess2));
EVP_DigestFinal_ex(&mdctx, md_value, &md_len);
EVP_MD_CTX_cleanup(&mdctx);

printf("Digest is: ");
for(i = 0; i < md_len; i++) printf("%02x", md_value[i]);
printf("\n");
}

我了解到类似的问题已经被问到了,但是当我试图解决所述的问题时,我没有办法补救我的问题。

确切的错误是:

代码语言:javascript
运行
复制
test2.c:6:12: error: storage size of ‘mdctx’ isn’t known
 EVP_MD_CTX mdctx;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-05 12:42:35

从OpenSSL 1.1开始,EVP_MD_CTX类型是一个不透明类型,因此您不能创建它的实例。

您需要调用EVP_MD_CTX_create(),后者返回可以用于调用其他函数的EVP_MD_CTX *。当你用完它后,打电话给EVP_MD_CTX_destroy清理他的资源。

代码语言:javascript
运行
复制
EVP_MD_CTX *mdctx;

mdctx = EVP_MD_CTX_create();
EVP_DigestInit_ex(mdctx, md, NULL);
EVP_DigestUpdate(mdctx, mess1, strlen(mess1));
EVP_DigestUpdate(mdctx, mess2, strlen(mess2));
EVP_DigestFinal_ex(mdctx, md_value, &md_len);
EVP_MD_CTX_destroy(mdctx);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55992010

复制
相关文章

相似问题

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