C++ 中的 CommonHMAC

CommonHMAC in C++

我正在尝试在 mac 上使用 c++ 中的 <CommonCrypto/CommonHMAC.h> 库来使用 sha512 中的密钥对字符串进行编码。我已经有一个将字符串编码为 sha512 的函数,我只是不知道如何使用密钥来完成。这是我在尝试使用 CommonHMAC 库实现密钥时创建的函数(它显然无法正确执行)。我没有找到关于如何在 c++ 中执行此操作的文档,如果有人知道请帮助。

#include <CommonCrypto/CommonHMAC.h>

std::string sha512_encoder(std::string secret, std::string data){
    const char *s = secret.c_str();
    const char *m = data.c_str();
    char* result = (char*)malloc(sizeof(char)*64);
    size_t dataSize = (size_t)(sizeof(char)*(strlen(m)));
    size_t secretSize = (size_t)(sizeof(char)*(strlen(s)));
    CCHmac(kCCHmacAlgSHA512, s, secretSize, m, dataSize, result);
    return result;
}

不要对结果进行堆分配,您必须将字节转换为人类可读的十六进制字符串。

std::string sha512_encoder(std::string secret, std::string data){
    unsigned char result[CC_SHA512_DIGEST_LENGTH];
    CCHmac(kCCHmacAlgSHA512, secret.c_str(), secret.length(), data.c_str(), data.length(), result);
    char sha512_str[128];
    for (int i = 0; i < 64; i++)
        sprintf(&sha512_str[i * 2], "%02x", (unsigned int) result[i]);
    return std::string(sha512_str);
}