C++ C++;OpenSSL 1.0迁移到3.0

C++ C++;OpenSSL 1.0迁移到3.0,c++,openssl,C++,Openssl,我试图创建一个机器人来访问和使用BitStamp 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

我试图创建一个机器人来访问和使用BitStamp 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::字符串b2a\u十六进制(字符*字节\u arr,int n)
{
常量静态标准::字符串十六进制代码=“0123456789abcdef”;
字符串十六进制字符串;
对于(int i=0;i>4)&0x0F];
十六进制字符串+=十六进制代码[bin_值和0x0F];
}
返回十六进制字符串;
}
使用openSSL 3.0,HMAC_CTX似乎已被弃用

编译时,我收到以下错误消息:

错误C4996“HMAC_更新”:自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\U CTX\U重置”:自OpenSSL 3.0 StonksBot C:\CodeProjects\StonksBot\StonksBot\Source\StonksBot\Requests\AuthenticationRequest.cpp 72以来 错误C4996“HMAC\u CTX\u new”:自OpenSSL 3.0 StonksBot C:\CodeProjects\StonksBot\StonksBot\Source\StonksBot\Requests\AuthenticationRequest.cpp 68以来


我在互联网上搜遍了所有的迁移技巧,但什么都找不到。任何一个善良的灵魂都可以帮助我或指引我如何将这段代码迁移到openSSL3.0支持的代码?

好的,有几个问题:

  • 错误C4996“HMAC_更新”:自OpenSSL 3.0以来

    看这里:

    <>听起来好像你在使用微软VisualStudioC++编译。您可能可以通过
    #pragma警告(disable:4996)

  • “好像我下载了3.0 alpha版本”

    使用Open SSL 1.1可能会更幸运:

08-Dec-2020 OpenSSL 1.1.1i现在可用,包括bug和安全性 修复


“希望有帮助!请将结果发回。

好的,有几个问题:

  • 错误C4996“HMAC_更新”:自OpenSSL 3.0以来

    看这里:

    <>听起来好像你在使用微软VisualStudioC++编译。您可能可以通过
    #pragma警告(disable:4996)

  • “好像我下载了3.0 alpha版本”

    使用Open SSL 1.1可能会更幸运:

08-Dec-2020 OpenSSL 1.1.1i现在可用,包括bug和安全性 修复


“希望有帮助!请将结果发回。

Q:我想您可能遇到了编译错误?请“编辑”您的问题,复制/粘贴错误。什么是“openSSL 3.0”?根据他们的网站,最新版本是1.1.1i。添加了错误消息。似乎我下载了3.0 alpha版本。@SamVarshavchik请参阅:“OpenSSL 3.0是当前正在开发的OpenSSL的下一个版本”问:我想您可能遇到了编译错误?请“编辑”您的问题,复制/粘贴错误。什么是“openSSL 3.0”?根据他们的网站,最新版本是1.1.1i。添加了错误消息。似乎我下载了3.0 alpha版本。@SamVarshavchik请参阅:“OpenSSL 3.0是当前正在开发的OpenSSL的下一个版本”,感谢您的帮助。#pragma警告对我没有任何帮助,但是回到OpenSSL1.1.1i并重建所有外部库依赖项就成功了。这应该教会我不要再在github上下载主分支:谢谢帮助。#pragma警告对我没有任何帮助,但是回到OpenSSL1.1.1i并重建所有外部库依赖项就成功了。这应该教会我不要再在github上下载主分支:D
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;
}