我用了this link使用 C++ 为任何数据创建 SHA1 散列。但是 SHA1 调用的输出缓冲区是一个 unsigned char*。我想存储十六进制值,即消息摘要值,以便我可以将它们用于其他操作。
因为它们是 unsigned char* ,所以将它们转换为字符串然后执行十六进制转换没有意义。所以我必须进行十六进制转换,然后将值存储为字符串或 char*。我该怎么做?
SHA1(ibuf, strlen(ibuf), obuf);
for (i = 0; i < 20; i++) {
printf("%02x ", obuf[i]);
最佳答案
要格式化为 char[]
,请使用 snprintf
:
char out[61]; //null terminator
for (i = 0; i < 20; i++) {
snprintf(out+i*3, 4, "%02x ", obuf[i])
}
编辑:我看到您已将问题标记为 C++。这是一个纯 C 的解决方案,主要是因为我不懂 C++。
我们使用的最大大小为 4,因为我们需要在该计数中包含空终止符(根据函数定义)。我们只向前移动了三个,专门用于覆盖空终止符。
根据我们的 "%02x "
格式字符串,末尾的额外空格必然会发生,但是如果我们对最后一个元素进行特殊处理,我们可以使用不同的格式字符串 >"%02x"
来避免这种情况。
关于c++ - 将从 SHA1 返回的 unsigned char* 转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11236216/