Я испытываю некоторые трудности в том, чтобы заставить strcmp
работать правильно и определить, что символы как внутри файла, так и символа вычисленного хеша вне файла идентичны.На глаз струны идентичны.Я предполагаю, что это потому, что один не завершается NUL, но я не уверен, какой / как исправить виновного виновника, чтобы включить указанный терминатор NUL.
FILE *ftest=fopen(hashInBuf, "rb");
SHA512_Init (&mdContext);
while ((bytes = fread (data, 1, 1024, ftest)) != 0)
SHA512_Update (&mdContext, data, bytes);
SHA512_Final (c,&mdContext);
if(access(hashOutBuf, F_OK) == -1){
FILE *ftest2=fopen(hashOutBuf, "wt");
for(i = 0; i < SHA512_DIGEST_LENGTH; i++){
fprintf(ftest2, "%02x", c[i]);
}
fclose(ftest2);
fclose(ftest);
}
else{
FILE *ftest2=fopen(hashOutBuf, "rb");
for(i = 0; i < SHA512_DIGEST_LENGTH; i++){
sprintf(&file512[i*2], "%02x", c[i]);
}
//printf("%s", file512);
if(!strcmp(hashOutBuf, file512)){
printf("Hash matches\n");
}
else{
printf("%s", file512);
printf("Hash does not match\n");
}
fclose(ftest2);
fclose(ftest);
}
Вывод для файла с именем file123.c
является: 60f879492baeacb7c8d8860cec5a477e8f495b81cbea776f4e75b5cb5fea3eda43500b8cc59daba4d0d43c27c2244a00cb91bdde01c5684f2bd5e84b14f18e4e
1007 * выход еще заявления, вычисления хэш для того же файла, является:. 60f879492baeacb7c8d8860cec5a477e8f495b81cbea776f4e75b5cb5fea3eda43500b8cc59daba4d0d43c27c2244a00cb91bdde01c5684f2bd5e84b14f18e4e 1009 * ^ идентичны (на глаз, по крайней мере ..)