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;
}
相關文章
相關標籤/搜索