内容校验和

最近更新时间:2017-05-03 16:55:46

校验和简介

文件的校验和分为两种:线性校验和树形校验和,用来校验请求内容的一致性。归档存储要求用户在简单上传文和分块上传时,包含上传内容的校验码。服务端收到校验和的时候,会检查内容与校验和是否一致,不一致则返回失败。用户在下载档案文件时,归档存储也会返回相应的校验码,供用户校验下载数据是否一致。

线性校验和

使用SHA256算法,通过HTTP头部x-cas-content-sha256传入,线性校验和表现为64位数字或者小写字母的组合

线性校验和举例如下

x-cas-content-sha256:24329af4a7cb3276ddf3d6b09d42452ef3cf894a30a61f999909e3c00a5344a7

树形校验和

通过HTTP头部x-cas-sha256-tree-hash传入,树形校验和表现为64位数字或者小写字母的组合

算法如下

  1. 对于文件内容的每个 1MB 区块,计算 SHA256 哈希。数据的最后一个区块可以小于 1MB。例如,如果您要上传一个 3.2MB 的档案,则您需要计算数据的前三个 1MB 区块中每一个区块的 SHA256 哈希值,然后计算剩余 0.2MB 数据的 SHA256 哈希。这些哈希值构成了树的叶节点。
  2. 构建每两个叶节点的根节点。连接两个连续子节点的哈希值,然后计算连接的哈希值的 SHA256 哈希作为这两个子节点的父节点哈希值。只剩下一个子节点时,将该哈希值提升到树的下一层。
  3. 重复步骤 2,直到结果树具有根为止。树根提供了整个档案文件的哈希,相应的子树根提供了分段上传中的段的哈希。

树形校验和举例如下

x-cas-sha256-tree-hash:74a1b786020a3c68fbe7bd3048a405bf5ec4b436977d917def4f78e5319d130f

简单上传中使用检验和

在使用Upload Archive接口时必须上传全文件的x-cas-sha256-tree-hashx-cas-content-sha256

分段上传中使用校验和

分段上传的每个段都是以1MB的2幂次为单位

  • 在使用 Upload Part 接口时必须上传每个Part的x-cas-sha256-tree-hashx-cas-content-sha256
  • 在使用 Complete Multipart Upload 接口时必须上传全文件的x-cas-sha256-tree-hash,用来检查数据一致性

下载中使用校验和

Initiate Job和Get Job Output请求都可以指定范围,如果两次指定范围之后,最终的连续数据段仍然构成一棵树(如下),那么服务端将返回该数据段的树形校验和,以便用户检查数据一致性。

如果最终的连续数据段无法构成一棵树,那么服务端不返回该数据段的树形校验和