【问题标题】:c++ HMAC sha512 bad codingc++ HMAC sha512 错误编码
【发布时间】:2022-01-15 14:14:38
【问题描述】:

我正在尝试编写 openssl HMAC SHA512 加密的代码,但我将我的结果与一些在线页面(例如 HMAC-SHA256 Online Generator Tool)进行比较,结果不一样我不知道我做错了什么,这是我第一次编码带有openssl加密的c++。

这是我到现在为止的代码:

char *key = "apiPrivateKey";
const unsigned char data[512] = "message";
int data_len = sha512HashData.size();
unsigned char hmac[128];
for (int i = 0; i < 128; i++)
{
    hmac[i]= 0;
}
char outputBuffer[128];
for (int i = 0; i < 128; i++)
{
    outputBuffer[i]= 0;
}

unsigned int len = EVP_MAX_MD_SIZE;
std::vector<unsigned char> digest(len);

HMAC_CTX *ctx;
unsigned int res_len;

ctx = HMAC_CTX_new();
HMAC_Init_ex(ctx, key, strlen((const char*)key), EVP_sha512(), NULL);
HMAC_Update(ctx, data, data_len);
HMAC_Final(ctx, hmac, &res_len);
HMAC_CTX_free(ctx);

int i = 0;
for(i = 0; i < 128; i++)
{
    sprintf(outputBuffer + (i * 2), "%02x", hmac[i]);
}

//https://stackoverflow.com/a/1195705/11632453
std::string myString;
myString.assign(outputBuffer, 128);
std::cout << "ComputeHMAC512Hash: " << myString << std::endl;

return myString;

有什么建议吗?谢谢

【问题讨论】:

    标签: c++ openssl hmac


    【解决方案1】:

    不知道如何调试您的代码,这是一个有效的。

    std::string b2a_hex(const std::uint8_t* p, std::size_t n) {
        static const char hex[] = "0123456789abcdef";
        std::string res;
        res.reserve(n * 2);
    
        for (auto end = p + n; p != end; ++p) {
            const std::uint8_t v = (*p);
            res += hex[(v >> 4) & 0x0F];
            res += hex[v & 0x0F];
        }
    
        return res;
    }
    
    std::string hmac_sha512(const char* key, std::size_t klen, const char* data, std::size_t dlen) {
        std::uint8_t digest[EVP_MAX_MD_SIZE];
        std::uint32_t dilen{};
    
        auto p = ::HMAC(
            ::EVP_sha512()
            , key
            , klen
            , (std::uint8_t*)data
            , dlen
            , digest
            , &dilen
        );
        assert(p);
    
        return b2a_hex(digest, dilen);
    }
    

    ::HMAC 来自openssl

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-05
      • 2022-06-16
      • 1970-01-01
      • 2014-12-04
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多