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

转载于:https://my.oschina.net/u/3045933/blog/3012384

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值