获取二进制文件 C 的哈希值

Neo*_*Neo 2 c sha1 file

我想获取我所知道的名称的二进制文件的哈希值。我尝试了以下操作,但后来意识到SHA1()返回字符串的哈希值(文件名)。但我想在文件本身上运行它。任何关于如何做到这一点的指示都会很棒。

char *fileName = "/bin/ls"
unsigned char hash[SHA_DIGEST_LENGTH];
SHA1((unsigned char *)fileName, strlen(fileName),hash);
Run Code Online (Sandbox Code Playgroud)

Neo*_*Neo 6

感谢大家的评论我解决了这个问题。我将代码发布在这里,这样其他人可能会发现它很有用。

void getFileHash(char *fileName){

unsigned char result[2*SHA_DIGEST_LENGTH];
unsigned char hash[SHA_DIGEST_LENGTH];
int i;
FILE *f = fopen(fileName,"rb");
SHA_CTX mdContent;
int bytes;
unsigned char data[1024];

if(f == NULL){
    printf("%s couldn't open file\n",fileName);
    exit(1);
}

SHA1_Init(&mdContent);
while((bytes = fread(data, 1, 1024, f)) != 0){

    SHA1_Update(&mdContent, data, bytes);
}

SHA1_Final(hash,&mdContent);

for(i=0;i<SHA_DIGEST_LENGTH;i++){
    printf("%02x",hash[i]);
}
printf("\n");
/** if you want to see the plain text of the hash */
for(i=0; i < SHA_DIGEST_LENGTH;i++){
    sprintf((char *)&(result[i*2]), "%02x",hash[i]);
}

printf("%s\n",result);

fclose(f);
}
Run Code Online (Sandbox Code Playgroud)