LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

前端别再计算文件的MD5了

freeflydom
2026年2月6日 9:34 本文热度 75

背景

最近需要做视频上传的功能,很自然的就想到要对文件做唯一性校验。避免同一个文件反复上传。
在用户选择文件后,先在前端计算文件的唯一值,然后发送到服务端用来判断这个文件是否上传过,如果上传过,就可以直接返回上传成功了。如果没有上传过,则开始上传。

概念

文件唯一性校验的基本原理是:通过对文件内容计算哈希值(Hash Value),为每个文件生成一个唯一的"数字指纹"。这个指纹具有三个关键特性:唯一性(不同文件产生相同哈希值的概率极低)、确定性(同一文件多次计算总会得到相同结果)以及不可逆性(无法从哈希值反推原始文件内容)。常见的哈希值计算方法有MD5和SHA。

MD5

MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,由Ron Rivest于1991年设计。它生成128位(16字节)的哈希值,通常表示为32个十六进制字符

SHA

SHA-256属于SHA-2算法家族,由美国国家安全局(NSA)设计,于2001年发布。它生成256位(32字节)的哈希值,表示为64个十六进制字符。SHA-256的设计更加复杂安全

准备工作

要计算文件唯一值,本能的反应就是用MD5,相信很多前端项目中都用到了md5加密,比如对用户密码加密之类的。我们的项目中自然也有用到,使用的是crypto-js。但是由于上传的是视频文件,还是需要先测试一下性能的。结果是我找了个一个10M左右的视频文件,md5的加密耗时是350ms左右。如果是500M的视频,这个耗时……
陷入了自我怀疑,可能是我没用对,网上一搜索,推荐使用spark-md5。据说对大文件计算md5做了优化,说干就干,再来测试一次。还是10M的视频文件,md5的加密耗时是102ms。确实是比crypto-js好了不少。但是文件大了之后,这个体验还是比较难保证的。
这时候通过ai的帮助,了解到了sha-256。推荐使用sha-256,更安全。不推荐MD5,碰撞攻击已变得实际可行。但是再一看。sha-256的耗时比md5还要更高。但是来都来了,测试一下也不花钱。说干就干。
发现sha-256是浏览器本身就支持的,并不需要额外引入第三方的代码。这个很好,用起来很方便,还不会有包大小的问题。还是10M的视频文件,结果很惊喜,耗时只有44ms。why?为什么计算量更大的sha-256反而比MD5更快??结果是浏览器自带的api在底层对cpu的硬件优化更好,导致出现了这个让人惊喜的现象。

测试结果

加密算法文件大小耗时
MD5 crypto-js10MB377ms
MD5 spark-md510MB102ms
sha-25610MB44ms

兼容性

mdn文档

结论

在需要计算文件唯一值的时候,推荐使用sha-256。更安全、更快还不需要引入第三方库

转自https://blog.csdn.net/fjqgx/article/details/156679319


该文章在 2026/2/6 9:34:46 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved