c++ - 将从 SHA1 返回的 unsigned char* 转换为字符串

标签 c++ hex sha1 unsigned-char

我用了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/

相关文章:

c++ - C++的类似Maven的依赖管理?

c++ - 避免在字符串中进行 if-else 分支以进行类型调度

python - 使用python将十六进制写入文件

ubuntu - Tpm2 未列出 sha1 PCR 库

c++ - 在没有 RTTI 的情况下模拟动态转换

c++ - 如何从 C++ 设置和读取并行端口上的引脚?

Python:转换以字节数组形式编码十六进制的 json 字符串

c++ - Valgrind: "Invalid write of size 1"在 char[] 到 std::vector<char> 迁移之后

ios - 未计算文件的 React-Native Bundle Error 错误 SHA-1

启用 sha1 时 PHP 登录功能不起作用