c# - 如何着手传输哈希文件完整性检查?

标签 c# java android data-integrity integrity

我有一个从服务器下载文件的应用程序。连接非常不稳定,因此我们正在实现一项检查文件完整性的功能,以便我们可以知道文件是否未正确下载并进行相应管理。

我应该如何处理这个过程?现在我向服务器请求文件的哈希值,然后我对文件本身发出另一个请求,然后计算下载文件的哈希值并比较文件的 2 个哈希值。

这是正确的方法吗?有些东西告诉我它不是。如果发现哈希值不同,我会经历几次完全相同的过程,包括再次请求哈希值(应该是相同的)。我应该每次都请求哈希吗?我这样做是为了防止传输不正确?这是不必要的吗?我有没有办法减少请求的数量,因为它们很昂贵,而且现在速度非常慢。

有什么想法吗?

以防万一,服务器使用 C# 而客户端是 Android 设备 (JAVA)。

谢谢,

最佳答案

TCP/IP 自己进行完整性检查;你不必。 CRC 确保每个数据包的完整性,TCP 协议(protocol)检查丢失的数据包并请求重新提交。因此,只要您的服务器生成 Content-Length header ,您就可以确保检测到误传并且客户端出错。

也就是说,文件哈希的一个好地方是自定义 HTTP header 。在其名称前加上“X-”前缀,这样它就不会与现有或 future 的标准 header 冲突。

关于c# - 如何着手传输哈希文件完整性检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5871122/

相关文章:

java - 如何从 org.joda.time.DateTime 转换为 java.time.ZonedDateTime

java - Android - 存储访问框架 - Uri 到本地文件

javascript - Angular ionic 真实简单 Controller 不工作

android - 任务程序类型已存在执行失败

c# - 将 vb6 "Type"(struct) 转换为 c# 的最佳方法

c# - 请定义#define

c# - Active Directory 用户密码到期日期 .NET/OU 组策略

java - Hibernate:找不到映射异常

c# - POCO 应该从 DTO 派生还是更好?

java - 在 Google 地理编码中使用 net.sf.json.JSONObject 时出现 java.lang.ClassCastException