簡體   English   中英

c++ HMAC sha512 編碼錯誤

[英]c++ HMAC sha512 bad coding

我正在嘗試編寫 openssl HMAC SHA512 加密,但我將我的結果與HMAC-SHA256 Online Generator Tool等一些在線頁面進行比較,結果不一樣我不知道我做錯了什么,這是我第一次編碼c++ 與 openssl 加密。

到目前為止,這是我的代碼:

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;

有什么建議么? 謝謝

不知道如何調試您的代碼,這是一個有效的。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM