恢复下载的MD5摘要

5
我正在从一个http服务器下载文件,需要考虑到随机的网络连接故障或计算机崩溃。如果发生这种情况,我会使用HTTP "Range:"头开始恢复下载。
由于下载必须根据MD5哈希进行验证,因此似乎无法在恢复后使用网络输入流获取正确的哈希值,因为java.security.MessageDigest没有基本方法可从先前下载的部分MD5哈希开始更新当前md5哈希。 我对md5内部机制不是很熟悉,理论上是否可能并且是否有库可以让我这样做?
从已下载的文件计算md5哈希值的计算成本过高。

我在标题中添加了一个“d”,因为看起来你在谈论简历,即记录你工作经验的纸张。 - Woot4Moo
2个回答

3
您可以在将网络流传送到MD5之前,使用先前恢复的文件内容来填充MD5。
如果您自己实现了MD5,您可以保存部分下载文件的状态,并从那里恢复MD5计算。例如,使用this MD5 implementation,只需保存/加载com.twmacinta.util.MD5中的com.twmacinta.util.MD5State state即可。关于您的评论,请注意本地实现完全是可选的,并且应该在纯Java中工作。以下是documentation的一句话:
当适当的本地库可用时,此类将尝试使用本地方法快速计算校验和[…]如果未找到库,则代码将退回到默认(较慢)的Java代码。

抱歉,在原帖中我没有提到可能需要重启JVM的情况。这也需要考虑在内。 - EddyYosso
你说得对。从代码上看,我认为你必须能够轻松地在这个摘要中保持状态。谢谢。唯一让我困扰的是这个特定库的本机依赖性。不过这个类看起来很有前途 http://ostermiller.org/utils/MD5.java.html - EddyYosso

2

我已经更正了Project-Penny(下载管理器)维基的链接。 - eckes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接