哈希值是校验文件是否为原版的唯一方式?

2015-10-22 17:49:56 +08:00
 543400
MD5 SHA1 CRC32 准?

好像网上都是用这种方式校验文件惹

有更先进的方式吗?

能够保证文件内容改动 而 MD5 SHA1 CRC32 不变的方法?
5570 次点击
所在节点    问与答
21 条回复
xfspace
2015-10-22 17:56:49 +08:00
MD5 能碰撞,一般小黑阔不搞这个。。。
SHA1 貌似也能碰出来,
mahone3297
2015-10-22 18:00:38 +08:00
@xfspace 光碰出来也没用,还要你下的这个东西,用起来,像原版一样。这样的需求,基本不可能实现吧。。。
xfspace
2015-10-22 18:06:46 +08:00
@mahone3297 在原版种个木马,把原版的 MD5 碰出来,怎么没用?
aivier
2015-10-22 18:07:51 +08:00
@xfspace 多大的软件,碰你 →_→
boter
2015-10-22 18:09:03 +08:00
还有 PGP 校验签名的方式,不过都不是很了解原理,只是会用,有人解释下更好
xfspace
2015-10-22 18:23:37 +08:00
@aivier Xcode 那个事件,如果作者还把 MD5 碰上了。。。。。。。。。。。。。。。。
virusdefender
2015-10-22 19:14:43 +08:00
保证文件不同而 MD5 一样已有先例,但是碰撞出来的文件同时具有特定的功能还不太可能。

sha1 和 crc32 不清楚。
liberize
2015-10-22 21:09:23 +08:00
cmxz
2015-10-22 21:52:10 +08:00
@mahone3297 在一些不影响程序逻辑的地方构造填充数据即可实现
VYSE
2015-10-22 22:33:05 +08:00
同时校验 MD5 和 SHA1 ,同时碰撞的概率。。。。
JamesRuan
2015-10-22 22:46:05 +08:00
CRC32 不是校验文件完整性的。

md5 、 sha1 都是 digest algorithm ,用于用很小的代价比较两段数据是否“不同”。 digest 不同的,一定不同, digest 相同的,有非常小的概率不同。

而 crc 是 error-ditecting code ,用于发现由于随机错误导致的数据失真。 CRC 不为 0 的,说明一定有错误发生,而 CRC 为 0 的,则不一定是没有数据错误。( Typically an n-bit CRC applied to a data block of arbitrary length will detect any single error burst not longer than n bits and will detect a fraction 1 − 2^{-n} of all longer error bursts )

两者有相似性,都是把一个更大的空间 map 到一个很小的空间,不同点是,要故意构造相同的 md5 digest 和 sha1 digest 是个难题,但构造 CRC 相对就很容易了;前者有很强的防故意构造能力(虽然 md5 已经被王小云攻破,可以比设计地更容易构造相同的 digest ),而后者只具有有限的抗随机错误的能力。
zhujinliang
2015-10-22 22:46:57 +08:00
无损压缩,然后对比压缩后的值,肯定不会碰撞
543400
2015-10-22 22:47:13 +08:00
@JamesRuan 有点难理解 我需要好好研习一下 不过还是谢谢你
gamexg
2015-10-22 22:47:44 +08:00
还有数字签名,具体的细节就不知道了。
一般 windows 下大的公司提供的软件安装包都有签名了。
右键=>属性=>数字签名。
543400
2015-10-22 22:49:41 +08:00
其实我最后想表达的是,网上有 md5 CRC32 的修改器 不过 SHA1 就没搜到
gamexg
2015-10-22 22:49:59 +08:00
其实数字签名也是 hash 的一种实现。
543400
2015-10-22 22:50:35 +08:00
@gamexg 好像变来变去都是哈希
JamesRuan
2015-10-22 22:57:38 +08:00
@543400 简单说, md5 sha1 除了检验文件不同外,还能抵抗故意构造相同的 digest ,而 CRC 除了检验文件不同外,只能抵抗随机错误。
543400
2015-10-22 22:59:52 +08:00
@JamesRuan 原来如此 但是网上那些 md5 sha1 修改器 要是修改到指定的值 那么 CRC 也会跟着变化?
lightening
2015-10-22 23:10:46 +08:00
给定一个 MD5 找到一个碰撞是可能的。但是这个碰撞的内容完全不可控。一个几 GB 的文件,很有可能找到一个几字节的文件和它 MD5 相同。基本不可能做到两个类似的文件 MD5 相同。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/230250

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX