我有一个应用程序从服务器下载文件。连接非常不稳定,所以我们正在实现一个功能来检查文件的完整性,以便我们知道文件是否没有正确下载并进行相应的管理。如何进行散列传输以进行文件完整性检查?
我应该如何去做这个过程?现在我向服务器请求文件的散列,然后我再次请求文件本身,然后计算下载文件和文件的散列,并比较这两个散列。
这是正确的做法吗?有些事告诉我,事实并非如此。如果发现哈希值不同,我会经历几次完全相同的过程,包括再次请求哈希值(应该是相同的)。我应该每次都需要散列吗?如果传输不正确,我会这样做吗?这是不必要的?有没有办法让我减少请求的数量,因为它们很贵,而且现在的情况很慢。
任何想法?
以防万一它的问题服务器使用C#和客户端是一个Android设备(JAVA)。
谢谢,
哈希匹配是*证据*文件正确传输,但不是*保证*;哈希碰撞。你正在玩的几率。因此,您的策略应该是计算各种策略的预期价值和预期成本,然后为客户选择预期净值最高的那一种。 – 2011-05-03 14:48:48
也就是说,我的策略是保持简单。如果传输失败,或者它“成功”,但哈希不匹配,则不要再尝试。告诉用户该尝试失败,并让他们决定是再试一次还是放弃。如果连接速度很慢,那么最终它就是你花费的用户*时间;让他们决定如何使用它。 – 2011-05-03 14:49:46