1

我使用此链接为使用 C++ 的任何数据创建 SHA1 哈希。但是 SHA1 调用的输出缓冲区是无符号字符 *。我想存储十六进制值,即消息摘要值,以便我可以将它们用于其他操作。

由于它们是 unsigned char* ,因此将它们转换为字符串然后执行十六进制转换是没有意义的。所以我必须进行十六进制转换,然后将值存储为字符串或 char*。我怎样才能做到这一点?

SHA1(ibuf, strlen(ibuf), obuf);
for (i = 0; i < 20; i++) {
        printf("%02x ", obuf[i]);
4

1 回答 1

3

要格式化为 a 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"来避免这种情况。

于 2012-06-27T23:39:11.427 回答