大文件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校验软件计算的结果:
完全一致
欢迎大家关注、留言讨论、可分享源码
大文件MD5计算 C语言 (从OpenSSL库中分离算法:三)相关推荐
- python计算文件md5值_用python 正确计算大文件md5 值
python 计算文件的md5值很方便,但如果只是简单的把文件都入到内存中,大文件会导致问题,一般采用切片的方式分段计算,下面的几个函数可以很好的解决这个问题. 使用 hashlib import h ...
- python 实现大文件md5值计算
参考:python 实现大文件md5值计算_ddw6022的博客-CSDN博客 python比较两个文本文件是否相同 - douzujun - 博客园 用python 正确计算大文件md5 值 - P ...
- golang 文件md5_golang 计算大文件md5
以前介绍过用python 计算大文件的md5 值,这里将介绍使用 golang 计算大文件md5 还是使用分片计算的方法 package main import ( "crypto/md5& ...
- 文件Md5计算(C语言版)
文件Md5计算(C语言版) 这是一个参考了网上很多人的C语言以及C++版本的计算工具而制作的,已对其优化了一部分,加了新功能:如果能计算出有效的Md5则自动复制到剪贴板,并且支持拖拽文件到窗口上,完全 ...
- C语言使用openssl库进行加密
概述 在密码学里面一共有3中分类: 1.对称加密/解密 对称加密比较常见的有DES/AES.加密方和解密方都持有相同的密钥.对称的意思就是加密和解密都是用相同的密钥. 2.非对称加密/解密 常见的加密 ...
- MacOS下使用C语言基于openssl库进行RSA加密解密
MacOS下使用C语言基于openssl库进行RSA加密解密 1 安装openssl并生成密钥 首先当然要安装openssl(这里记得看一下安装路径,应该是/usr/local/Cellar/open ...
- log包在Golang语言的标准库中是怎么使用的?
Golang 语言的标准库中提供了一个简单的 log 日志包,它不仅提供了很多函数,还定义了一个包含很多方法的类型 Logger.但是它也有缺点,比如不支持区分日志级别,不支持日志文件切割等. 01. ...
- 大文件分块计算MD5值 C++实现
代码基于OpenSSL官方开源代码修改,省去了不同平台上需要引用OpenSSL库的麻烦(尤其是Windows平台),减小链接后程序的大小. 每次读取 1024 个字节作为一个块进行计算,之后再读取下一 ...
- Linux 大文件crc计算,Windows和Linux下使用MD5、SHA1、CRC32校验备份文件的完整性
因为经常会用到备份加密压缩过的数据到不同的服务器,然而这些服务器是否可靠,服务器的提供者是否值得信任,为了保证文件的完整性不被篡改,也为了多个地方存储的同一个大文件的备份自己能够快速的识别出来是否是同 ...
最新文章
- cuda安装教cudnn安装显卡问题
- 遥望星空FTP文件同步工具(附源码)1.0 发布
- 突破phpMyAdmin 改密码后无法登陆的解决方法
- PostgreSQL学习手册(四) 常用数据类型
- python控制结构(二)_Python程序控制结构---2
- 尚未整理【风控】互联网金融-构建评分卡模型部分知识点
- 【GUI转exe】Matlab将GUI转化为exe文件
- ElasticSearch日志删除命令
- 道路交通实时流量监控预测系统(大讲台)
- 【第一季】CH07_FPGA_RunLED创建VIVADO工程实验
- Fireflow 终于发布啦!
- 7-1 输出全排列 (20 分)(全排列+递归+图解)Come Baby
- 深和jsonp【转】 jsonpk跨域问题详解
- Sublime Text3的插件管理Package Control安装
- Qt配置OpenCV教程,无需复杂的编译过程,(详细版)
- MATALAB动态爱心代码
- 小米上的lineageos
- 我的MATLAB学习之路
- 【读书笔记】区块链思维
- 新媒体运营教程:直播间高转化活动如何策划!
热门文章
- 黑小米真不应该,如今它已是国货之光,成为国产手机在海外领军者
- 大白菜U盘重装win7系统教程,PE重装win7系统教程
- 置换 置换群 应用 +置换群对某些算法问题的解释
- git拉取报错:You have not concluded your merge. (MERGE_HEAD exists)
- 空间矢量数据处理 | 第一讲:矢量数据的读入与保存
- (二)Java线程与系统线程,生命周期
- python爬虫(五):博客spider
- 关于1NF、2NF、3NF、BCNF范式
- kaldi 的安装和thchs30语音识别测试
- FPGA 控制 nand flash读写