39
|
Benedikt Waldvogel assylias · 技术社区 · 16 年前 |
![]() |
1
21
如果你有很多小文件,你的瓶颈将是文件I/O,而可能不是校验和算法。 可以找到哈希函数列表(可以看作是校验和) here . 您是否有任何理由不能使用文件系统的修改日期来确定文件是否已更改?这可能会更快。 |
![]() |
2
12
有很多快速的CRC算法可以做到这一点: http://www.google.com/search?hl=en&q=fast+crc&aq=f&oq= 编辑: 为什么仇恨?正如其他答案所证明的那样,CRC是完全合适的。谷歌搜索也是合适的,因为没有指定语言。这是一个古老的问题,已经解决了很多次,不太可能有一个明确的答案。 |
![]() |
3
9
|
![]() |
4
8
如果您通过网络接收文件,则可以在接收文件时计算校验和。这将确保您在数据在内存中时计算校验和。因此,您不必从磁盘将它们加载到内存中。 我相信,如果你应用这种方法,你的系统开销几乎为零。 这是我在嵌入式系统上使用的例程,该系统对固件和其他东西进行校验和控制。
|
![]() |
6
4
zlib头文件中提供的adler32被宣传为比crc32快得多,但准确性稍低。 |
![]() |
7
3
CRC32可能已经足够好了,尽管有 小的 您可能会遇到冲突,这样一个被修改的文件可能看起来没有冲突,因为两个版本生成了相同的校验和。因此,为了避免这种可能性,我建议使用MD5,它很容易足够快,碰撞发生的可能性降低到几乎无限的程度。 正如其他人所说,对于大量的小文件,你真正的性能瓶颈将是I/O,所以问题在于如何处理它。如果你发布更多细节,可能会有人提出一种解决方案。 |
![]() |
8
3
你最重要的要求是“检查内容是否发生了变化”。 如果检测到文件中的任何更改是最重要的,MD-5、SHA-1甚至SHA-256应该是您的选择。 鉴于您表示校验和在加密方面不好,我建议使用CRC-32,原因有三。CRC-32在8K文件上提供了良好的锤击距离。CRC-32的计算速度至少比MD-5快一个数量级(您的第二个要求)。有时同样重要的是,CRC-32只需要32位来存储要比较的值。MD-5需要4倍的存储,SHA-1需要5倍的存储。 顺便说一句,在计算哈希值时,任何技术都会通过预先添加文件的长度来加强。 |
![]() |
9
2
根据维基 page 卢克指出,MD5实际上比CRC32快! 我自己在Windows Vista上使用Python 2.6尝试过,也得到了同样的结果。 以下是一些结果: crc32:162.481544276 MBps md5:224.489791549 MBps crc32:168.332996575 MBps md5:226.089336532 MBps crc32:155.851515828 MBps md5:194.943289532 MBps 我也在思考同样的问题,我很想使用Rsync的Adler-32变体来检测文件差异。 |
![]() |
10
1
只是对上述内容的补充;jpeg使用有损压缩,压缩程度可能取决于用于创建jpeg的程序、系统上的颜色调色板和/或位深度、显示伽玛、图形卡和用户设置的压缩级别/颜色设置。因此,在字节级别比较基于不同计算机/平台或使用不同软件构建的JPEG将非常困难。 |
![]() |
Alex · 配置文件校验和猜测(CRC) 7 年前 |
![]() |
Will Haley · 为什么文件校验和会不一致地失败? 7 年前 |
![]() |
Waxhead · Fletchers16校验和是否适用于小数据? 7 年前 |
![]() |
assemblaj · 为什么我的代码不返回预期的和预先计算的校验和? 7 年前 |
![]() |
Chris Barry · 如何构建字节数组帧并计算校验和 8 年前 |
![]() |
Raf · 在python中计算哈希并将其添加到文件中 9 年前 |
![]() |
user3535074 · 校验和比较能表明两个文件有多不同吗? 9 年前 |
![]() |
anemo · 复制后sqlite Db的Android MD5校验和更改 10 年前 |
![]() |
crysoberil · 是否应始终依赖错误检测机制? 10 年前 |