一、本文前言
1. 背景介绍
MD5信息摘要算法(英语:MD5 Message-Digest
Algorithm),是一种使用范围很广的加密算法。该算法是不可逆的,但是可以采取碰撞的方式撞出对应的明文值。由于MD5加密生成的值是唯一的,因此利用这个特性,可以在项目中为很多操作提供便捷的验证途径。
2. 本文概况
本文将列举项目中可能遇到的与MD5加密值使用相关的场景,以及对应的处理方法。不讲废话,下面列举的场景均来自实际项目中所可能遇到的问题【欢迎补充】
二、适用场景
文件下载、发送、分片前,确保文件完整,计算其MD5值。
例如:A文件在A服务器上计算其MD5值,B电脑下载A文件到本地,再去到B电脑上计算A文件MD5值,前后进行比对,结果一样则表示文件完整可以使用
1. 文件下载完整度校验
场景需求:
- 通过某个下载地址下载软件包、插件包、模块包、扩展包或其他资料
下载风险:
- 由于提供下载方服务器状态不稳定,导致下载的数据存在缺失
- 由于连接的网络质量较差状态不稳定,导致下载的数据存在缺失
- 由于使用不完善的下载工具、缓存未清理,导致下载的数据存在缺失
实际场景:
- 通过某个下载地址下载软件包或其他资料,下载的文件由于上述问题可能导致不完整使用会出现问题,因此可以使用下列方法验证文件是否完整
1.1 Windows使用【cmd】计算MD5方法
certutil -hashfile 文件/路径 md5

1.2 Windows使用【Powershell】计算MD5方法
Get-FileHash -Algorithm MD5 文件/路径

1.3 Linux使用【md5sum】计算MD5方法
md5sum 文件/路径

2. 文件流转完整度校验
场景需求:
- 通过某个渠道、软件、通道等接收发送的文件
传输风险:
- 由于发送方网络状态不稳定,导致下载的数据存在缺失
- 由于数据传输通道状态不稳定,导致下载的数据存在缺失
- 由于接收方网络状态不稳定、缓存未清理等,导致下载的数据存在缺失
实际场景:
- 网络状态不良时传输发送文件,存在诸多不确定因素,为了避免接收的文件可正常使用接收后需要做校验
2.1 Windows使用【cmd】计算MD5方法
certutil -hashfile 文件/路径 md5

2.2 Windows使用【Powershell】计算MD5方法
Get-FileHash -Algorithm MD5 文件/路径

2.3 Linux使用【md5sum】计算MD5方法
md5sum 文件/路径

3. 文件分片合并完整度校验
场景需求:
- 特殊环境下,大文件拷贝需要使用光盘,一般光盘大小有限制,所以拷贝大文件往往需要采取分片的形式,将大文件分成多个小文件刻成多个光盘,全部导入后再进行分片合并。
刻录风险:
- 由于刻录环境存在波动不能稳定刻录数据,导致刻录的文件存在缺失
- 由于刻录的光盘有坏块,导致刻录的文件不完整
- 由于刻录过程中误触了刻录机连接线等,导致刻录的数据存在缺失
实际场景:
- 将一个大文件分片成多个小文件,然后将分片后的文件刻录到多个盘中,由于环境、光盘、刻录机等可能存在的问题,都会导致刻录到光盘的数据不完整,因此当文件导入内网合并后需要做数据校验
3.1 文件分片
- 此处不详细描述分片与合并的操作,具体参考另一篇文文章,仅列举操作命令
3.1.1 Linux分片
- -b :指定分片包的大小的参数
- 10m :具体分片包的大小
- -d:指定分片包后缀命名为数字的参数
- 100MB.gz :指定需要分片的大文件
- 100MB.tar.gz. :指定分片后的包命名前缀,后缀为数字递增
- 命令效果:将 100MB.gz 这个100MB的文件按照一个文件10MB分片分为10个文件,解决了大文件导入问题
split -b 100m -d 100MB.gz 100MB.tar.gz.

3.1.2 Windows分片
- 使用压缩软件360压缩、7-zip等均可分片,选择指定分片大小即可

3.2 文件合并
3.2.1 Linux合并
cat 100MB.tar.gz.0* >> 100MB.tar.gz

3.2.2 Windows合并
- Windows合并直接将分片的文件放至同一文件夹解压即可
3.3 计算MD5
- MD5计算方法同1.1、1.2、1.3与2.1、2.2、2.3
文件合并后MD5校验不一致排查思路:
问题排查思路:
1.外网进行文件分片
2.外网将分片的文件合并,计算合并MD5与原文件比对,确定外网分片的每个文件没有问题
2.确保外网分片每个文件没有问题后,单独计算每个分片文件的MD5值
3.将所有分片文件导入内网
4.导入内网后计算每个分片文件的MD5值,确保与外网一致
5.将文件合并,然后计算整个文件MD5值,基本上没有问题
4. 文本MD5加密
场景需求:
- 当需要修改某个配置文件的密码字段或其他内容时,密码多数情况会以密文形式存储,因此需要计算明文的密文再将其修改到配置文件中
4.1 Linux
- -n :禁止
echo在输出末尾添加换行符【很重要必须加的参数】
echo -n "admin123" | md5sum

4.2 windows
- Windows计算纯文本的MD5值需要将文本内容写入文件内,计算文件的MD5值得出文本的值
certutil -hashfile admin123.txt md5

5. 文件黑白名单MD5提取
场景需求:
- 除了文件流转下载等需要,部分场景下需要计算文件的MD5值,用来给文件加入黑白名单使用
使用需求:
- 由于杀毒软件误处理需要的文件,需要避免再次被处理
- 由于某个文件已知是病毒或者受管控,可以在内网终端或者其他平台将文件的MD5值加入黑名单
实际场景:
- 杀毒软件对某个文件误处理,此时文件又不能直接上传加入白名单,可以计算文件的MD5进行加白,黑名单同理
【文件的MD5计算方法同1.1、1.2、1.3与2.1、2.2、2.3】
三、使用环境
3.1 互联网
- 文件下载
- 文件流转
- 文件识别
3.2 内网
- 文件下载
- 文件流转
- 文件识别
- 文件刻录与合并
- 弱口令识别
四、注意事项
1. 部分Windows不带certutil命令
内网不能连接外网环境下,部分Windows不支持自带命令校验MD5,常见原因可能如下:
- 系统版本过旧【Windows Server 2003 / Windows XP】
- 工具路径不正确
- 系统被精简、定制系统
- 管理员策略管控
处理方法:使用自带的Powershell进行校验【1.3、2.3有使用方法】
2. 大小写敏感问题
Windows:使用Windows命令行计算MD5值,命令正确即可,大小写不敏感
Linux:使用Linux命令行计算MD5值,需要大小写正确,大小写敏感
五、相关资料
欢迎交流
MD5值在项目中的应用与计算方法
1416

被折叠的 条评论
为什么被折叠?



