c++ - 在数据中包含 \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
有没有人知道我的代码是否有问题?
谢谢!
解决方案
推荐阅读
- sql - 如何使总和匹配位于不同行中的两个 ID - Redshift
- javascript - 返回带有回调函数参数的函数
- python - Python:当我覆盖它们时,基类属性和方法会发生什么?他们还“存在”吗?
- python - 关于部首数的程序:IndexError: list index out of range [python]
- python - Pandas 根据列值将特定行的列设置为 True
- r - R 中的 afex:错误:受试者内部设计中的空单元格(即错误的数据结构)。但是数据结构很好
- node.js - Heroku App 没有看到 Node JS 应用程序的环境变量
- java - 有没有办法为请求自定义 FilterChain (JAX-RS)
- python - 从另一个函数打印列表
- javascript - unhandledpromiserejectionwarning:错误源于在没有catch块的异步函数内部的异步机翼内部,