【问题标题】:OpenSSL “error: storage size of ‘ctx’ isn’t known” [duplicate]OpenSSL“错误:‘ctx’的存储大小未知”[重复]
【发布时间】:2019-05-05 12:37:17
【问题描述】:

我正在使用 Ubuntu 19.04 和(据说)OpenSSL 1.1.1b,但是在使用 EVP_MD_CTX 时,我在编译本来可以工作的代码时遇到了这个问题。我玩弄了 OpenSSL(尝试在 18.04 上手动更新),但是卸载/重新安装成功(据我所知),因为它现在显示提到的版本。

#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");
}

我知道有人问过与此类似的问题,但是在尝试作为答案陈述的修复时,我无法解决我的问题。

确切的错误是:

test2.c:6:12: error: storage size of ‘mdctx’ isn’t known
 EVP_MD_CTX mdctx;

【问题讨论】:

    标签: c openssl


    【解决方案1】:

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

    您需要改为调用EVP_MD_CTX_create(),它返回一个EVP_MD_CTX *,您可以在调用其他函数时使用。使用完毕后,拨打EVP_MD_CTX_destroy清理资源。

    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);
    

    【讨论】:

    • 消除了很多错误!剩下的我也有点不确定如何修复:test2.c:32:37: warning: pointer targets in passing argument 3 of ‘EVP_DigestFinal_ex’ differ in signedness [-Wpointer-sign] EVP_DigestFinal_ex(mdctx, md_value, &amp;md_len);In file included from test2.c:2: /usr/local/include/openssl/evp.h:548:12: note: expected ‘unsigned int *’ but argument is of type ‘int *’ __owur int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, 这些是否可以直接修复,或者这是否完全需要一个新问题?再次感谢您!
    • @JosephSmith 使用无符号整数作为值
    • @AnttiHaapala 我应该自己发现...谢谢哈哈。
    • @JosephSmith 有各种你想一直使用无符号的加密货币。
    猜你喜欢
    • 2017-07-28
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    相关资源
    最近更新 更多