C++ OPENSSL 库 HMAC 函数返回值每次运行时都不一样?

标签 c++ openssl hmac

我正在尝试使用 C++ 从 Open SSL 库中获取 HMAC SHA256 哈希函数,但是当我打印结果十六进制值时,我发现每次运行代码时我的输出都不同。可能是什么问题

#include <iostream>
#include <string>
#include <openssl/hmac.h>

int main(){
std::cout <<  "Generating key for RRC" << std::endl;

std::array <char, 32> test = {0x69, 0x01, 0x01,  0x00, 0x01, 0x01, 0x01,  0x00, 0x01, 0x01,
                             0x00, 0x01, 0x01, 0x01,  0x00, 0x01, 0x01, 0x01,  0x00, 0x01,
                             0x00, 0x01, 0x01, 0x01,  0x00, 0x01, 0x01, 0x01,  0x00, 0x01,
                             0x00, 0x01 };

std::array <char, 5> string = = {0x69, 0x03, 0x01,  0x02, 0x01 };

unsigned int lengthResult;

unsigned char result[EVP_MAX_MD_SIZE];

HMAC(EVP_sha256(), (unsigned char*)test.data(), test.size(),
                            (unsigned char*)string.data(), string.size(),
                             result, &lengthResult);

for (auto i:result)
    std::cout  << i + 0 <<" " ;

}

最佳答案

HMAC_SHA256 在末尾产生一个 SHA256 和,它是 32 字节。 EVP_MAX_MD_SIZE 为 64 字节,用随机内存垃圾初始化。如果我编译并运行你的代码,前 32 个字节总是相同的。

关于C++ OPENSSL 库 HMAC 函数返回值每次运行时都不一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56600007/

相关文章:

linux - JWT Signature HS256 - Linux 和网站上的不同结果

java - HMAC 一个 php 字节数组

C++ vector<vector<int>> 开头保留大小

python - 将 wxPython 与现有的 c++ Opengl 上下文一起使用

java - 查找证书是自签名的还是 CA 签名的

google-chrome - 编写 SSL 客户端和服务器 key

c++ - 区分分配在栈上的对象和堆对象

c++ - openCV 输出 SIFT 描述符的类型

RSA签名验证参数说明

ssl - TLS 1.0-计算完成的消息MAC