我使用OpenSSL的HMAC SHA256接口来散列字符串:
unsigned char* res = HMAC(EVP_sha256(), key, key_len, data, data_len, result, result_len);
得到的散列值'result_len'的大小是32字节,但是,我正在编程的接口要求SHA256散列值是64字节。
我找到了这个代码片段,循环经过散列输出缓冲区并打印每个字节:
for (unsigned int i = 0; i < result_len; i++)
{
printf("%02hhX", result[i]);
}
https://stackoverflow.com/a/62458287/21129211
上面的代码输出了我所期望的64字节(所以哈希是正确的)。
然而,我想把缓冲区转换成64字节,作为一个字符串。当我从这里搜索和使用base 64 decode(和encode)函数时:
https://stackoverflow.com/a/41094722/1107474
不幸的是,返回的字符串(编码和解码)与预期的64字节值没有任何相似之处。
如何将printf()
输出转换为64字节字符串?
1条答案
按热度按时间tvmytwxo1#
@dbush评论:
您可以研究合并字节(位移位)以减少对
sprintf()
的调用,这需要了解架构的字节序。还有一个标准的轻量级版本可以将字节转换为十六进制。不要忘记在循环结束后终止字符串。