IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 大文件MD5计算 C语言 (从OpenSSL库中分离算法:三) -> 正文阅读

[数据结构与算法]大文件MD5计算 C语言 (从OpenSSL库中分离算法:三)

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

续上述博客

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

跳转到实操视频

C语言计算大文件MD5

#include <iostream>
#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校验软件计算的结果:

在这里插入图片描述

完全一致

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

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-25 12:43:47  更:2021-10-25 12:45:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:28:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码