首页 > 解决方案 > 在数据中包含 \n 时,Openssl HMAC Sha256 输出不正确

问题描述

我正在尝试使用 Openssl 第三方库在 C++ 中实现 HMAC-sha256。当键和数据不包含“\n”时,工作文件下面的代码。我用不同的生成器控制了这个,例如:https ://www.freeformatter.com/hmac-generator.html#ad-output

std::string s_data = "data";
char* c_data = new char[s_data.length() + 1];
std::strcpy(c_data, s_data.c_str());

std::string s_key = "key";
char* c_key = new char[s_key.length() + 1];
std::strcpy(c_key, s_key.c_str());

unsigned char* sha;
sha = HMAC(EVP_sha256(), (unsigned char*)c_key, strlen((char*)c_key),(unsigned char*)c_data, strlen(c_data), NULL, NULL);

char buffer[65];
for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) {
    sprintf(buffer + (i * 2), "%02x", sha[i]);
}
buffer[64] = 0;

以“data”和“key”作为输入值的输出是正确的。 5031fe3d989c6d1537a013fa6e739da23463fdaec3b70137d828e36ace221bd0

但是如果我使用输入值“data\n”而不是“data”:

std::string s_data = "data\n";

我的输出是: c7a7c96c73af32ea6e5b1ca6768b1d822249eb88f85160433d7b09bb2b21e170

而正确的值应该是:0255ec05dbdc7fa09ab830cb47666b7918132b5b79b3aa924f00e4dfe3cd18af

有没有人知道我的代码是否有问题?

谢谢!

标签: c++opensslsha256hmac

解决方案


推荐阅读