Linux下文件完整性校验以及C代码的实现

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;
}
相关文章
相关标签/搜索