OpenSSL ha sh файла совпадает с C - PullRequest
1 голос
/ 13 июля 2020

я учусь делать ha sh файла в C с помощью OpenSSL, но всегда получаю одно и то же ha sh. Я пробовал разные файлы и контент, но ha sh не изменился. Если я использую разные файлы, он должен показывать разные ha sh. Я не уверен, в чем проблема.

Это мой код:

#include <openssl/sha.h>
#include <stdio.h>
#include <fcntl.h>

#define BUFF_SIZE 256

int main(int argc, char* argv[]) {
   int fd;
   char buff[BUFF_SIZE];
   int i = 0;

   SHA_CTX sha_ctx;
   unsigned char sha_hash[SHA_DIGEST_LENGTH];

   SHA1_Init(&sha_ctx);

   fd = open(argv[1], O_RDONLY, 0);
   do {
      i = read(fd, buff, i);
      SHA1_Update(&sha_ctx, buff, i);
   } while(i > 0);
   close(fd);

   SHA1_Final(sha_hash, &sha_ctx);

   printf("\n Hash of the file: %s \n\n", argv[1]);
   for(i = 0; i < SHA_DIGEST_LENGTH; ++i) {
      printf("%x", sha_hash[i]);
   }
   printf("\n\n");
   return 0;
}

Скомпилируйте вот так

gcc -g hash.c -lcrypto

1 Ответ

3 голосов
/ 13 июля 2020

Думаю, ваша проблема здесь:

i = read(fd, buff, i);

i инициализировано нулем, поэтому вы говорите read() читать не более 0 символов. Вместо этого вы должны указать размер своего буфера:

i = read(fd, buff, BUFF_SIZE);

Я также рекомендую вам добавить проверку ошибок в вызовы open и read, как предлагает комментарий Андреаса Венцеля. Проверьте свой argc, чтобы убедиться, что вы получили ожидаемое количество аргументов командной строки.

...