C++ OpenSSL 1.0 迁移到 3.0

4
我正在尝试制作一个机器人来访问并使用BitStamp API(https://www.bitstamp.net/api/),但我遇到了麻烦。
在链接的页面中,他们展示了如何使用c++(V2版本)进行身份验证的示例。我在使用openSSL进行身份验证时遇到了问题:
HMAC_CTX ctx;
HMAC_CTX_init(&ctx);

HMAC_Init_ex(&ctx, api_secret.c_str(), api_secret.length(), EVP_sha256(), NULL);
HMAC_Update(&ctx, (unsigned char*)data_to_sign.c_str(), data_to_sign.length());
HMAC_Final(&ctx, result, &len);
HMAC_CTX_cleanup(&ctx);

std::string x_auth_signature = b2a_hex( (char *)result, 32 );
free(result);

并且

std::string b2a_hex(char *byte_arr, int n)
{
    const static std::string hex_codes = "0123456789abcdef";
    std::string hex_string;
    for ( int i = 0; i < n ; ++i ) {
        unsigned char bin_value = byte_arr[i];
        hex_string += hex_codes[( bin_value >> 4 ) & 0x0F];
        hex_string += hex_codes[bin_value & 0x0F];
    }
    return hex_string;
}

使用openSSL 3.0,HMAC_CTX似乎已被弃用。编译时出现以下错误消息:
错误C4996'HMAC_Update':自OpenSSL 3.0以来 StonksBot C:\ CodeProjects \ StonksBot \ StonksBot \ Source \ StonksBot \ Requests \ AuthenticationRequest.cpp 70
错误C4996'HMAC_Init_ex':自OpenSSL 3.0以来 StonksBot C:\ CodeProjects \ StonksBot \ StonksBot \ Source \ StonksBot \ Requests \ AuthenticationRequest.cpp 69
错误C4996'HMAC_Final':自OpenSSL 3.0以来 StonksBot C:\ CodeProjects \ StonksBot \ StonksBot \ Source \ StonksBot \ Requests \ AuthenticationRequest.cpp 71
错误C4996'HMAC_CTX_reset':自OpenSSL 3.0以来 StonksBot C:\ CodeProjects \ StonksBot \ StonksBot \ Source \ StonksBot \ Requests \ AuthenticationRequest.cpp 72
错误C4996'HMAC_CTX_new':自OpenSSL 3.0以来 StonksBot C:\ CodeProjects \ StonksBot \ StonksBot \ Source \ StonksBot \ Requests \ AuthenticationRequest.cpp 68
我已经在互联网上搜寻过任何迁移提示,但是找不到任何资料。请问有哪位好心的人能帮帮我或指导我如何将此代码迁移到支持openSSL3.0的代码?

你是否遇到了编译错误?请“编辑”你的问题,复制/粘贴错误信息。 - paulsm4
"openSSL 3.0"是什么?根据他们的网站,最新版本是1.1.1i。 - Sam Varshavchik
添加了错误信息。看起来我下载了3.0 alpha版本。 - LostTab
1
@SamVarshavchik 请查看OpenSSL 3.0:“OpenSSL 3.0是目前正在开发中的下一个版本”。 - Remy Lebeau
1个回答

2

好的,有几个问题:

  • Error C4996 'HMAC_Update': Since OpenSSL 3.0

    看这里:https://dev59.com/82Ij5IYBdhLWcg3wRTH3#20448142

    听起来你正在使用微软 Visual Studio C++ 进行编译。你可以使用 #pragma warning(disable : 4996) 来消除 C4996 “错误”。

  • "Seems like i download the 3.0 alpha version"

    你可能会在 Open SSL 1.1 上运行更顺利:

https://www.openssl.org/

08-Dec-2020 OpenSSL 1.1.1i 现已发布,包括错误和安全修复

希望对你有所帮助!请回复你的结果。


感谢您的帮助。#pragma warning 对我没有任何作用,但是返回到 OpenSSL1.1.1i 并重新构建所有外部库依赖项解决了问题。这应该教会我不要再次从 Github 下载主分支 :D - LostTab
确认/sdl将此警告提升为错误,并且可以通过在属性 > C/C++ > 命令行下添加/wo4996作为附加选项来保留/sdl(它有很多好处),这将将C4996降级为警告并且每次编译只发出一次。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接