MD5摘要恢复下载

时间:2011-02-07 15:55:40

标签: java md5

我正在从http服务器下载文件,并且必须考虑在下载期间的随机点,网络连接失败或计算机崩溃。如果发生这种情况,我会使用HTTP“Range:”标题启动简历下载。

由于下载必须针对MD5哈希进行验证,因此我似乎无法在恢复后使用网络输入流来获取正确的哈希,因为java.security.MessageDigest似乎没有方法基本上说“从我之前下载的部分md5哈希开始更新当前的md5哈希”。

我对md5的内部不是很熟悉 - 这在理论上是否可行,是否有可以让我这样做的库?

从下载的文件中计算md5哈希值将是非常昂贵的性能。

2 个答案:

答案 0 :(得分:3)

在向网络流提供文件之前,您可以向MD5提供要恢复的文件的内容。

如果您自己实施MD5,则可以沿部分下载的文件保存状态,并从那里恢复MD5计算。例如,使用this MD5 implementation,就像在com.twmacinta.util.MD5State state内保存/加载com.twmacinta.util.MD5一样简单。关于你的评论,请注意本机实现是完全可选的,它应该在纯Java中工作。以下是documentation

的引用
当适当的本机库可用时,此类将尝试使用本机方法快速计算校验和[...]如果找不到库,代码将回退到默认(较慢)的Java代码。

答案 1 :(得分:2)

我刚刚使用建议的fast-md5完成了针对此问题的库,但没有原生支持。您可以序列化状态并在程序重新启动时重新加载它。

https://code.google.com/p/project-penny/wiki/RecMD5