Вычисление md5 с помощью openssl

Есть такой код использующий openssl

 void md5( const unsigned char* value, unsigned int size, unsigned char* md_value, unsigned int* md_len)
 {
    const ::EVP_MD* md = ::EVP_get_digestbyname("MD5");
    EVP_MD_CTX* mdctx = ::EVP_MD_CTX_create();
    ::EVP_MD_CTX_init(mdctx);
    ::EVP_DigestInit_ex(mdctx, md, NULL);
    ::EVP_DigestUpdate(mdctx, value, size);
    ::EVP_DigestFinal_ex(mdctx, md_value, md_len);
    ::EVP_MD_CTX_destroy(mdctx);
}

int main(int argc, char* argv[])
{
    char value[] = "qwerty";
    unsigned char md_value[EVP_MAX_MD_SIZE];
    unsigned int mdLen;
    md5( (unsigned char*)value, sizeof(value) - 1, md_value, &mdLen);

    for (int i = 0; i < mdLen; ++i)
        std::cout << std::showbase << std::hex << (int)md_value[i] << " ";
    std::cout << std::endl;

    return 0;
}

В проекте падает с segmentation fault на функции ::EVP_DigestInit_ex(mdctx, md, NULL); в тестовом проекте почему-то работает нормально.

Компилятор g++ 7.5.0. Версия libssl-dev: 1.1.1-1ubuntu2.1~18.04.5 Версия libssl1.1 1.1.1-1ubuntu2.1~18.04.5

Почему может быть такое поведение?


Ответы (0 шт):