我对哈希算法了解的不多。
在将文件转发到需要 MD2/MD5/SHA-X 中的文件哈希的远程系统(有点像 S3)之前,我需要在 Java 中实时计算传入文件的哈希。 此哈希不是出于安全原因而计算的,而只是为了一致性校验和。
我能够在转发文件时使用 Java 标准库的 DigestInputStream 实时计算此哈希值,但想知道哪种算法最适合用来避免使用 DigestInputStream 的性能问题?
我的一位前同事测试过并告诉我们,与 unix 命令行或文件相比,实时计算哈希值可能非常昂贵。
编辑过早优化: 我在一家旨在帮助其他公司将其文件非物质化的公司工作。 这意味着我们有一批处理来自其他公司的文件传输。我们的目标是 future 每天处理数百万份文档,实际上,这批文件的执行时间对我们的业务很敏感。
每天对 100 万份文档进行 10 毫秒的哈希优化,每天的执行时间减少了 3 小时,这是相当大的。
最佳答案
如果您只是想检测传输过程中的意外损坏等,那么简单(非加密)校验和就足够了。但请注意(例如)16 位校验和将无法在 216 中检测到一次随机损坏。而且它无法防止有人故意修改数据。
Checksums 上的维基百科页面,列出了各种选项,包括许多常用(且便宜)的选项,如 Adler-32 和 CRC。
但是,我同意@ppeterka。这有点“过早优化”的味道。
关于java - 什么是更便宜的哈希算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19157262/