我在使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
else语句的输出(计算同一文件的哈希值)为: 60f879492baeacb7c8d8860cec5a477e8f495b81cbea776f4e75b5cb5fea3eda43500b8cc59daba4d0d43c27c2244a00cb91bdde01c5684f2bd5e84b14f18e4e
^相同(至少在眼睛上..)。