【问题标题】:MD5 digest of a resumed download恢复下载的 MD5 摘要
【发布时间】:2011-02-07 15:55:39
【问题描述】:

我正在从 http 服务器下载文件,并且必须考虑在下载过程中的随机点,网络连接失败或计算机崩溃。如果发生这种情况,我会使用 HTTP“Range:”标头开始恢复下载。

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

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

从下载的文件中计算 md5 散列会在性能方面非常昂贵。

【问题讨论】:

  • 我在标题中添加了一个“d”,因为它看起来像是您在谈论简历,就像在纸上写着您的工作经验一样

标签: java md5


【解决方案1】:

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

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

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

【讨论】:

  • 对不起,在原帖中我没有提到 jvm 重启的可能性。这也必须考虑在内。
  • 你是对的。通过查看代码,我了解到您必须能够非常容易地将状态保持在此摘要中。谢谢你。这个特定库唯一困扰我的是本机依赖项。尽管ostermiller.org/utils/MD5.java.html 这门课看起来很有希望
【解决方案2】:

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

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

【讨论】:

  • 我更正了 project-penny(下载管理器)wiki 的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-18
  • 1970-01-01
  • 2013-08-18
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多