c++ - 如何使用 openssl/sha.h 对文本文件进行 SHA256 哈希处理

标签 c++ io sha256

我试图对我系统上的一个文件进行哈希处理,我的 C++ 代码中的哈希值是正确的长度,但它与我在 $ echo -n file.txt | 时得到的哈希值不同。 sha256sum

我尝试混合使用我目前在 stackoverflow 上看到的内容,并最终得到一些几乎可以工作的东西。

void sha256_file(const std::string &fn)
{
     FILE *file;

     unsigned char buf[8192];
     unsigned char output[SHA256_DIGEST_LENGTH];
     size_t len;

     SHA256_CTX sha256;

     file = fopen(fn.c_str(), "rb");

     if(file == NULL)
           // do whatever
     else
     {
          SHA256_Init(&sha256);
          while((len = fread(buf, 1, sizeof buf, file)) != 0)
               SHA256_Update(&sha256, buf, len);
          fclose(file);
          SHA256_Final(output, &sha256);

          for(int i = 0; i < SHA256_DIGEST_LENGTH; i++)
                printf("%02x", output[1]);
          printf("\n");
     }

请原谅,我正在努力学习如何通过少量文档使用它,而大多数人只是在尝试散列短字符串。

$ echo -n 文件.txt | sha256sum 是我用来检查哈希的,但输出不同。我会复制粘贴,但它在另一个系统上。

最佳答案

很简单,您在打印循环中使用了 [1] 而不是 [i]

      for(int i = 0; i < SHA256_DIGEST_LENGTH; i++)
            printf("%02x", output[1]);

应该是

      for(int i = 0; i < SHA256_DIGEST_LENGTH; i++)
            printf("%02x", output[i]);

愚蠢的拉丁字母表!

关于c++ - 如何使用 openssl/sha.h 对文本文件进行 SHA256 哈希处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54260184/

相关文章:

haskell - 为什么 Haskell 中没有 IO 转换器?

python - 来自 Gogs hook 的 secret (无法连接到 python3)

c++ - 函数模板中的参数包是否可以跟随另一个取决于返回类型的参数?

java - 保持输出流打开

c++ - 为什么我会收到这些链接错误?

c - WriteFile 与 IO 完成端口问题

mysql - 在读取存储在 mysql.user 中的登录信息时,MySQL 如何知道使用哪种算法?

algorithm - md5 的 padding 和 sh256 一样吗?

c++ - Test t; 之间有什么区别?和测试 t();?如果 Test 是一个类

c++ - 将读取的内存过程存储在缓冲区中,然后对其进行搜索