1. Linux命令行下文件md5检验的方式:
$ touch filename
$ md5sum filename #计算文件的md5值
d41d8cd98f00b204e9800998ecf8427e filename
$ md5sum filename > filename.md5 #将计算的md5值写入文件
$ md5sum -c filename.md5 #检验文件完整性,注意此时文件filename要在当前目录下
filename: OK
$ md5sum -c filename.md5 | cut -d " " -f2 #取出校验结果,能够在代码中判断
OK
$ cat filename.md5 | cut -d " " -f1 #从文件中取出校验码
d41d8cd98f00b204e9800998ecf8427e
$ md5sum filename | cut -d " " -f1 #只取md5值
d41d8cd98f00b204e9800998ecf8427e
2. C 代码实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
// 方式一,直接计算文件的md5值,和已知的md5值比较
const char *fileMd5 = "d41d8cd98f00b204e9800998ecf8427e";
FILE *pf = popen("md5sum filename | cut -d \" \" -f1", "r");
char res[1024];
memset(res, 0x00, sizeof(res));
fread(res, sizeof(res), 1, pf);
pclose(pf);
printf("filename md5 is: %s\n", res);
if(0 == strncmp(res, fileMd5, 32))
{
printf("check sucess\n");
}
else
{
printf("check fail\n");
}
// 方式二,文件自带md5文件
pf = popen("md5sum -c filename.md5 | cut -d \" \" -f2", "r");
memset(res, 0x00, sizeof(res));
fread(res, sizeof(res), 1, pf);
pclose(pf);
if(0 == strncmp(res, "OK", 32))
{
printf("check sucess\n");
}
else
{
printf("check fail\n");
}
return 0;
}