首页 > 解决方案 > 如何使用 openssl/sha.h 对文本文件进行 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 file.txt | sha256sum是我用来检查哈希但输出不同的东西。我会复制粘贴,但它在另一个系统上。

标签: c++iosha256

解决方案


很简单,你做了[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]);

愚蠢的拉丁字母!


推荐阅读