使用MD5验证文件完整性提高数据安全
前言
这两天经常看到一些数据安全问题,比如某塔服务器管理面板推出的某塔数据一键迁移脚本就存在设计缺陷,某位倒霉的站长将国内服务器数据迁移至海外数据中心,结果网站丢失了不少资源文件,看似只是个网络传输与延迟丢包问题,但是我们设想假如插件在打包文件时采用双端验证文件md5的方式进行文件校验,避开这种问题岂不是游刃有余?
概述
MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16个字符(BYTES))的散列值(hash value),用于确保信息传输完整一致。
MD5散列样式
一般128位的MD5散列被表示为32位十六进制数字。以下是一个43位长的仅ASCII字母列的MD5散列:
即使在原文中作一个小变化(比如用,取代,)其散列也会发生巨大的变化:
空文本的散列为:
应用
使用windows cmd终端进行文件MD5校验
1.使用快捷键Win+R
,调用运行
界面,输入cmd
后回车
2.输入certutil -hashfile <文件名称> MD5,回车后,即可校验文件的MD5了(注意写绝对路径)
使用Linux CLI终端进行文件MD5校验
md5sum [选项可为空] <文件名称>
https://blog.csdn.net/cnds123321/article/details/124946370
使用JS进行文件MD5校验
该程序参照 https://github.com/satazor/js-spark-md5 构建。在线文件MD5运算工具
使用卡巴斯基在线验证md5并检测潜在风险
思考
MD5真的绝对安全吗(哈希碰撞)
举个很简单例子,两张不同的图片出现了相同的md5值
利用MD5碰撞,生成两张显示不同,但是MD5相同的GIF图片
https://www.chenxublog.com/2020/12/09/different-gif-same-md5.html
让我们看看这些可怕的哈希碰撞发生的可能性有多大。由于另一个原则,生日悖论,文档池中的哈希碰撞在可能的哈希值数量的平方根附近变为 50% 的可能性。(这被称为生日悖论,因为概率遵循与一个房间里两个人生日相同的概率相同的规则。)对于 SHA-512,一个 512 位哈希,文档中的字符数量大约是 2^256 个 而2^256真是个天文数字。
2^256 有多大?大约是116万亿万亿万亿万亿万亿。比 1 大一点,后跟 77 个零。给它一个比例,它明显多于我们银河系中的原子数(大约 2^226)。
从静态上讲,这意味着发生碰撞的可能性极小。比您和您的 12 位同事分别被闪电击中的可能性更小。比你的房子被流星击中的可能性更小……要达到 2^256,您必须在 2^221 年内每毫秒编写一份文档。那是 400 万亿万亿万亿万亿年。比你能想象的任何事情都更不可能……但是,我承认,不完全是零(例如“挖矿”也可以说是利用计算机破解一道与记账相关的数学题——“哈希谜题”)
我们应该恐慌吗?当然不是。关注哈希冲突的问题是因为这种可怕的数据损坏可能性忽略了所有其他更有可能导致数据损坏的方式。这就像你因为担心被闪电击中而买了一辆碳纤维自行车,然后不戴头盔骑行穿过波士顿市中心的交通。人类在衡量风险方面真的很糟糕,所以有时我们会担心错误的事情,或者我们根本不应该担心的事情。
参考文献
https://segmentfault.com/a/1190000022920399
https://www.zhihu.com/question/22651987/answers/updated?utm_id=0
https://permabit.wordpress.com/2008/07/18/what-do-hash-collisions-really-mean/
撰写评论