最简路径是直接用 openssl 的 hmac() 函数,但需严守参数顺序、正确传入密钥/消息长度(避免 strlen 截断)、用 &digest_len 获取实际长度,并注意返回指针指向静态缓冲区;若需流式计算或精细控制上下文,应选用 hmac_ctx(1.0.x 用 init/cleanup,1.1.1+ 用 new/free);base64 编码必须通过 bio_f_base64() 实现并禁用换行,不可用 hex 拼接;签名前的字符串拼接须严格对齐服务端规则,包括小写头名、去空格值、n 分隔等,建议封装验证函数并比对原始字节数组。

直接用 HMAC() 函数是最简路径,但参数顺序和内存管理容易翻车
OpenSSL 的 HMAC() 是一个纯函数式接口,不用初始化上下文,适合一次性计算。但它要求你手动传入密钥长度、消息长度、摘要算法指针,且返回的 digest 内存由你负责释放(或用栈空间)。常见错误是把 key.Length() 写成 strlen(key.c_str()) ——当 key 含