栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

大文件MD5计算 C语言 (从OpenSSL库中分离算法:三)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

大文件MD5计算 C语言 (从OpenSSL库中分离算法:三)

从OpenSSL库中分离算法-MD5算法-大文件MD5计算

续上述博客

小文件计算MD5时,可以把文件数据一次性都读到内存中计算,但当文件很大时,将文件一次性读到内存中是不可行的,此时,需要对文件数据分块进行MD5计算。具体方法如下:

跳转到实操视频

C语言计算大文件MD5

#include 
#include "md5/md5.h"

#define BlockSize 1024  //512整数倍

int main()
{
    unsigned char md[MD5_DIGEST_LENGTH] = { 0 };
    MD5_CTX C;
    MD5_Init(&C);
    FILE* Fp = nullptr;
    fopen_s(&Fp, "e:\软件备份\Anaconda3-2020.11-Windows-x86_64.exe", "rb");
    if (Fp) {
        unsigned char Data[BlockSize] = { 0 }; 
        while(1)
        {
            int ReadLen = fread(Data, 1, BlockSize, Fp); //每次读取BlockSize大小的文件数据
            if (ReadLen == 0) {
                break;
            }
            MD5_Update(&C, Data, ReadLen);
        }
        MD5_Final(md, &C);
        for (int i = 0; i < MD5_DIGEST_LENGTH; i++) {
            printf("%02x-", *(md + i));
        }
        fclose(Fp);
    }
}

MD5算法在计算时,是采用512一分组的方式,因此在定义分区BlockSize时,应采用512的整数倍,但OpenSSL库中的MD5算法,分块大小不是512整数倍,也并不影响最终结果。

输出结果:

08-41-ff-cb-92-7a-3c-2e-db-d6-82-52-0f-52-e5-46-

使用md5校验软件计算的结果:

完全一致

欢迎大家关注、留言讨论、可分享源码

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/346809.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号