为了账号安全,请及时绑定邮箱和手机立即绑定

对多个文件的 MD5 进行合并再进行 MD5 的结果, 依然唯一吗?

对多个文件的 MD5 进行合并再进行 MD5 的结果, 依然唯一吗?

阿波罗的战车 2019-04-16 20:27:48
这样一个需求,有文件a.htmlb.css,a当中有b的依赖.然后上线了,为了做CDN,我们调整文件名a..html,b..html.这时候比如说b变了,那么b.md5.css这个也变了,实际上,a..html也变了.因为a相当于引用了一个b的文件名,而b的文件名因为内容改了也就变了...我们使用md5就是为了文件内容唯一..然后,这样递归生成md5压力比较大,我考虑这样一个策略,不是把b..css替换进a再去计算a的md5,而是把a的md5加上b修改了名字之后的md5.两个md5一起生成新的md5.用这样的方案进行上线,静态资源是否还能保持唯一呢?
查看完整描述

2 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

这要看你的md5值是用来做什么的。从你描述的情况来看,文件名里的md5只是为了保证文件被更改后产生一个新的文件名来使强制cdn刷新。md5值本身并不用来做验证,那么你说的方法是可行的。
但是用你的方法会有几个问题:
如果b改回去了,b的文件名会被改回去,理论上a的文件名也应该改回去,但用你的方法虽然a的内容没变(被改回去了)但是文件名上的md5却变了。所以会出现文件名不同但内容相同的情况。
如果a有两个依赖b和c。当b,c都改动的时候,md5(md5(a)+md5(b)+md5(c))和md5(md5(a)+md5(c)+md5(b))是不一样的,取决于顺序。这其实不会影响你的目的(使文件名发生改动),但看上去怪怪的。
文件名不可预测。
其实算MD5很快,而且只是发布的时候做一次功而已,不用搞这么复杂。
                            
查看完整回答
反对 回复 2019-04-16
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

这不是循环了么?
其实,直接构建的时候拉git的commithash就好了,直接截取前半部分的话还具备天然的从
构建后的文件名找对应的commit的功能,多好
                            
查看完整回答
反对 回复 2019-04-16
  • 2 回答
  • 0 关注
  • 1001 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信