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;
}