请教一个 md5 的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
24 条回复    2017-01-17 15:41:46 +08:00
araraloren
    1
araraloren  
   2017-01-16 12:37:23 +08:00
整个文件的 MD5 只能用整个文件的数据来算。。
yangff
    2
yangff  
   2017-01-16 12:46:58 +08:00
比较简单的做法是自己实现一个 md5 算法,然后每个 block update 之后把 context 存下来……
abellee
    3
abellee  
   2017-01-16 12:52:11 +08:00 via iPhone
你上传之前 拿全文件计算好 不就好了吗
ykjsw
    4
ykjsw  
   2017-01-16 12:56:35 +08:00   1
raysonx
    5
raysonx  
   2017-01-16 13:02:17 +08:00
楼上已经说得很清楚了。
我再补充一点, MD5 现在很容易被碰撞,如果条件允许的话建议上 SHA256
livevilwt
    6
livevilwt  
OP
   2017-01-16 13:39:01 +08:00
@yangff context 貌似是不可序列化的,不好存..
Kilerd
    8
Kilerd  
   2017-01-16 13:44:01 +08:00
所以说还是 SHA3 好, 随便 update 。输出 HASH 长度也是随便定的,方便多了。
stiekel
    9
stiekel  
   2017-01-16 13:55:55 +08:00
@raysonx MD5 很容易被碰撞?虽然的确有碰撞的,但说很容易,还是有点夸张吧。
stancaohua
    10
stancaohua  
   2017-01-16 14:51:54 +08:00
@stiekel 不加盐的 MD5 确实很容易。
而且好像在哪里看到个说法是普通 MD5 应被视为已被破解的加密方式了。。。
otakustay
    11
otakustay  
   2017-01-16 15:11:49 +08:00
@raysonx md5 能碰撞但是要做出具备攻击能力的碰撞可是几乎不可能

md5 可以流式输入,你必须建个队列,从第 0 块开始到一块就计算一块,如果到的顺序是 1-4-0-2-3 的话,你得等到 0 到了以后一起算 01 ,再等 2 到了把 2 给 update 上去, 3 到了再把 34 给 update 上去
otakustay
    12
otakustay  
   2017-01-16 15:12:51 +08:00
另外一个办法是,如果你的切块的算法是一致的话,每块单独算,再把所有块的 md5 合起来再做一次 md5 其实也是可以保证效果的
cxbig
    13
cxbig  
   2017-01-16 15:13:31 +08:00
LZ 只是用 MD5 验证文件完整性吧?不涉及密码或加密数据,你们谈碰撞、破解的有意义么?

传输总有个拆分和合并的过程,做完了再验证不就好了?
raysonx
    14
raysonx  
   2017-01-16 15:38:43 +08:00
@stiekel
@otakustay
@cxbig
我只是指出一种更安全的方式的而已,毕竟能用 MD5 的地方一定能用 SHA-2 解决。
如果只是考虑验证完整性,用 checksum 或者外加纠错码就足够了。
raysonx
    15
raysonx  
   2017-01-16 15:43:20 +08:00
“年份用两位数表示就足够了”
“ IP 地址用 32 位整数就足够了”
“ 16K 内存可以满足所有人的需求”
“又不涉及金钱,干嘛要上 HTTPS ?”
otakustay
    16
otakustay  
   2017-01-16 15:44:04 +08:00
@raysonx 如果 SHA1 的话碰撞难度和 MD5 差不多,如果是 SHA256 的话性能是 MD5 的 1/3 左右, SHA512 和 SHA256 性能相当,看需要取舍吧
ctsed
    17
ctsed  
   2017-01-16 15:46:20 +08:00 via iPhone   1
俩不同文件同 md5
md5 彩虹表跑明文

碰撞是第一个意思
raysonx
    18
raysonx  
   2017-01-16 15:56:35 +08:00 via Android
@otakustay 其实就服务端来看, OpenSSL 在近些年的硬件上跑 sha1 和 sha256 的性能都差不多了,取决于实现,不过楼主如果用前端 js 实现估计就没办法了。
mingyun
    19
mingyun  
   2017-01-16 23:09:07 +08:00
php md5_file
former
    20
former  
   2017-01-17 09:43:52 +08:00
前端可以计算出整个文件的 md5 值,然后分片发送给后端,全部传完,后端按照既定的切割算法把文件合并了,然后 md5_file(),比对一下前端计算的值就可以了吧。
btw 楼主分片上传有什么 demo 可以参考推荐吗
stiekel
    21
stiekel  
   2017-01-17 09:53:00 +08:00
@stancaohua [不加盐的 MD5 确实很容易] ,这个和碰撞没有关系, MD5 碰撞是指两个不同的字符串或文件算出来的 MD5 相同。

通过穷举或字典计算 MD5 值对比来获取原字符串,这个不是碰撞。
woostundy
    22
woostundy  
   2017-01-17 10:35:28 +08:00
@stancaohua 密码或字符串容易被碰撞,文件几乎不可能被碰撞
Vizogood
    23
Vizogood  
   2017-01-17 13:10:11 +08:00
MD5 会被碰撞是指 不同文件(数据) →相同 MD5
目前还没有工具能够做到 不同文件(数据)→相同 MD5→指定功能和内容
彩虹表跑 MD5 密码和碰撞没啥关系,这个是可逆性,并且 MD5 本身不可逆,依靠强大的彩虹表可以对比出原数据.
离不能用的时候还远呢...... 足够了
stancaohua
    24
stancaohua  
   2017-01-17 15:41:46 +08:00
@stiekel
@woostundy

随手在网上搜了篇文章 http://bobao.360.cn/learning/detail/2577.html
这个问题重点不在于安全,校验文件的方法有很多,我只是指出 MD5 并不安全。当然如果题主确定价值足够低没有被搞的意义的话用什么方法都行。
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1450 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 36ms UTC 16:17 PVG 00:17 LAX 08:17 JFK 11:17
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86