Как SHA256 хэшировать текстовый файл кусками с помощью openssl / sha.h - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь хэшировать файл в моей системе, и хэш в моем коде 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 - это то, что я использую для проверки хеша, но выходы разные. Я бы скопировал пасту, но она в другой системе.

1 Ответ

0 голосов
/ 18 января 2019

Легко, вы сделали [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]);

Глупый латинский алфавит!

...