md5实现校验两个文件的一致性

前言

本文主要介绍如何使用md5实现对两个文件一致性的校验,希望大家看完本文后能有所收获!

1.md5介绍

MD5是一种哈希算法,可以将任意长度的数据转换为固定长度的哈希值,通常用于验证数据完整性,即通过比对两个数据的MD5值来判断它们是否相同。文件是计算机中的一种数据存储形式,可以保存数据或程序。文件也可以通过MD5算法计算出其哈希值, MD5是一种数字指纹,而文件则是一个具体的数据或程序,md5除了应用于文件内容校验,还包括密码加密等应用场景。

2.md5常用函数介绍

MD5_Init、MD5_Update、MD5_Final是MD5算法中的三个常用函数。

(1)MD5_Init是用于初始化MD5算法的函数,用于初始化MD5上下文结构体,该上下文结构体包含MD5算法所需的所有状态和标志位。该函数的原型如下:

void MD5_Init(MD5_CTX *context);

其中,MD5_CTX是MD5算法上下文结构体。

(2)MD5_Update是用于进行数据处理的函数,用于将需要进行MD5散列的数据逐个分块进行处理,并更新上下文状态。该函数的原型如下:

void MD5_Update(MD5_CTX *context, const void *data, unsigned long len);

其中,context是MD5算法上下文结构体,data是数据块指针,len是数据块长度。

(3)MD5_Final是用于产生散列结果的函数,该函数使用MD5算法的上下文状态来计算散列值,并将其存储在指定的缓冲区中。该函数的原型如下:

void MD5_Final(unsigned char *digest, MD5_CTX *context);

其中,digest是存储散列结果的缓冲区指针,context是MD5算法上下文结构体。

以上便是MD5算法中的三个常用函数介绍,在实际应用中,MD5_Init、MD5_Update、MD5_Final通常一起使用,以便进行数据散列并生成MD5散列值。

3.md5文件校验示例

现在我们先创建两个文件text1和text2,向里面保存随机的数据样本,我这里已经创建好了,下面展示一下两个文件中的内容,可以看到现在内容是不一致的:
在这里插入图片描述
接下来我们实现一下利用md算法检查这两个文件的一致性,代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<openssl/md5.h>

#define filename1 "text1"
#define filename2 "text2"

void MD5File(const char *filename, unsigned char digest[MD5_DIGEST_LENGTH])
{
    FILE *file;
    MD5_CTX context;
    unsigned char buffer[1024];
    size_t len;

    file = fopen(filename, "rb");
    if (file == NULL) {
        return;
    }

    MD5_Init(&context);
    while ((len = fread(buffer, 1, 1024, file))) {
        MD5_Update(&context, buffer, len);
    }
    MD5_Final(digest, &context);

    fclose(file);
}

int main()
{
	unsigned char digest1[MD5_DIGEST_LENGTH];
	unsigned char digest2[MD5_DIGEST_LENGTH];
	MD5File(filename1, digest1);
    MD5File(filename2, digest2);
	if(memcmp(digest1,digest2,MD5_DIGEST_LENGTH))
	{
		printf("两个文件内容不一致!\n");
	}
	else
	{
	    printf("两个文件内容一致!\n");	
	}	
	return 0;
}

接下来我们使用gcc命令编译这段代码,生成可执行文件
在这里插入图片描述
发现会有上方提示md5相关函数未定义,是因为缺上系统标准库文件,我们在编译的时候使用-l加上库名即可,想了解gcc命令使用的小伙伴可以看我的上篇博文,使用下面的gcc命令即可

gcc  md5.cpp -o md5 -l crypto -l ssl

现在已经生成了可执行文件md5,我们现在执行该文件,对文件一致性进行校验,可发现打印文件内容不一致
在这里插入图片描述
更改文件内容保持一致,再次执行md5,提示文件内容一致

在这里插入图片描述
如此,便实现我们利用md5算法实现文件内容一致性校验的期望了。

结尾

本博客主要介绍md5算法在文件内容校验上的应用,希望大家看完这篇博文能学到一些知识,最后送大家一句:天下不负有心人,滴水石可穿!

  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值