我使用this link使用C++为任何数据创建SHA1哈希。但是SHA1调用的输出缓冲区是一个无符号char *。我想存储十六进制值,即消息摘要值,以便可以将其用于其他操作。
由于这些是无符号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返回的无符号char *转换为字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11236216/