【问题标题】:How to SHA256 hash a text file in chunks with openssl/sha.h如何使用 openssl/sha.h 对文本文件进行 SHA256 散列处理
【发布时间】:2019-01-19 04:30:29
【问题描述】:

我正在尝试在我的系统上散列一个文件,而我的 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 file.txt | sha256sum 是我用来检查哈希的,但输出不同。我会复制粘贴,但它在另一个系统上。

【问题讨论】:

  • echo -n file.txt | sha256sum 实际上是将文本 "file.txt" 传递给 sha256sum 而不是 file.txt 的内容。如果那是您想要的,那很好,但如果您尝试实际对内容进行哈希处理,那么您并没有完全做到这一点。

标签: c++ io sha256


【解决方案1】:

简单,您在打印循环中使用了[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]);

愚蠢的拉丁字母!

【讨论】:

  • 那是那些 “Doah...” 时刻之一... 用敏锐的眼光从一堆乱七八糟的代码中挑选出'1''i'。干得好。
猜你喜欢
  • 2021-04-25
  • 2018-08-11
  • 1970-01-01
  • 2015-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多