当前位置: 首页 > news >正文

md5sum

概念作用及原理

md5sum是一种常用的哈希算法,用于计算数据的MD5哈希值。MD5(Message Digest Algorithm 5)是一种广泛使用的加密散列函数,用于将任意长度的数据映射为固定长度的哈希值(通常是128位)。这个哈希值是唯一的,即使输入的数据只改变一个字节,其生成的哈希值也会完全不同。

MD5算法主要用于验证文件的完整性和一致性,以及在网络传输中检测数据是否被篡改。通过计算文件的MD5哈希值并将其与预先计算好的哈希值进行比对,可以确定文件是否被修改。在数字取证、密码存储等领域也有广泛应用。

md5sum的作用主要有两个方面:

  1. 文件完整性验证:通过计算文件的MD5哈希值,可以验证文件的完整性。如果文件在传输或存储过程中被篡改,其MD5哈希值会发生变化,从而可以检测到文件是否被修改。

  2. 数据校验:通过计算数据的MD5哈希值,可以确保数据的一致性。在网络传输中,发送方和接收方可以计算数据的MD5哈希值,并将其进行比对,以确保数据的正确传输和接收。

MD5(Message Digest Algorithm 5)算法的计算原理如下:

  1. 初始化:将一系列常量保存为初始哈希值。

  2. 填充数据:将要计算的数据进行填充,使得数据长度对512位取模后余数等于448。填充通常包括在数据末尾添加一个1和若干个0。

  3. 追加长度信息:将原始数据的长度(以二进制表示)追加到填充后的数据末尾,以确保长度信息参与哈希计算。

  4. 分块处理:将填充后的数据分割为512位(64字节)的多个块。

  5. 初始化哈希值:将初始哈希值(A、B、C、D)复制到临时变量中。

  6. 处理块数据:对每个块进行一系列的操作,包括置换、位运算和非线性函数等。

  7. 更新哈希值:将每个块处理后的结果与当前的哈希值进行计算,得到新的哈希值。

  8. 输出结果:将最终的哈希值以指定的格式输出。

通过这种计算方式,MD5算法将任意长度的数据映射为一个唯一的128位哈希值,这个哈希值通常以16进制或32位字符串形式表示。即使数据发生微小改动,其哈希值也会完全不同,从而可以检测到数据的篡改。需要注意的是,由于MD5存在碰撞等安全性问题,现在已不推荐用于密码存储等安全敏感领域。

Qt代码实现

QString MyVersion::getMD5Sum()
{QFile sourceFile(QCoreApplication::applicationFilePath());qint64 fileSize = sourceFile.size();const qint64 bufferSize = 10240;if (sourceFile.open(QIODevice::ReadOnly)) {char buffer[bufferSize];int bytesRead;int readSize = qMin(fileSize, bufferSize);QCryptographicHash hash(QCryptographicHash::Md5);while (readSize > 0 && (bytesRead = sourceFile.read(buffer, readSize)) > 0) {fileSize -= bytesRead;hash.addData(buffer, bytesRead);readSize = qMin(fileSize, bufferSize);}sourceFile.close();QString md5Res = QString(hash.result().toHex());return md5Res;}return QString();
}

用作软件序列号

最后,我们取md5值的后四个字节作为软件的序列号。

 

http://www.lryc.cn/news/105077.html

相关文章:

  • 图文档数字化:实现高效管理的几大步骤
  • 服务器磁盘占用过高分析
  • 【C语言】通讯录3.0 (文件存储版)
  • 【C#常用操作】
  • 深入理解CountDownLatch计数器
  • 从SQL注入绕过最新安全狗WAF中学习fuzz
  • C语言每日一题:12《数据结构》相交链表。
  • 【Spring框架】SpringMVC
  • HDFS中namenode安全模式
  • blender凹凸感和置换形变
  • 力扣 343. 整数拆分
  • 【JavaWeb】正则表达式
  • Vue中常用到的标签和指令
  • C++设计模式之访问者模式
  • Java8的stream常用的操作
  • 传统计算机视觉
  • 13-3_Qt 5.9 C++开发指南_基于QReadWriteLock 的线程同步
  • opencv04-掩膜
  • python解析帆软cpt及frm文件(xml)获取源数据表及下游依赖表
  • TypeScript
  • 解决启动vue前端报错:npm ERR! Missing script: “serve“
  • 数据结构 | 线性数据结构——列表
  • 【ARM 常见汇编指令学习 6 - bic(位清除), orr(位或), eor(异或)】
  • 在CSDN学Golang场景化解决方案(EFK分布式日志系统方案)
  • MySQL篇
  • 图数据库Neo4j学习四——Spring Data NEO
  • UE虚幻引擎 UTextBlock UMG文本控件超过边界区域以后显示省略号
  • Spring Boot实践五 --异步任务线程池
  • <C语言> 动态内存管理
  • 【ASPICE】:学习记录