文档首页/ 对象存储服务 OBS/ 最佳实践/ 基于crc64或MD5的OBS数据完整性校验
更新时间:2026-06-30 GMT+08:00
分享

基于crc64或MD5的OBS数据完整性校验

应用场景

对象数据在上传下载过程中,有可能会因为网络劫持、数据缓存等原因,存在数据不一致的问题。

方案架构

OBS提供通过计算MD5、crc64对上传下载的数据进行完整性校验。默认情况下,OBS不会进行完整性校验,您可以在上传下载时主动启用校验,具体使用方式参见表1

  • crc64、MD5的完整性校验结果不互通,例如如果您使用crc64方式在上传时通过了完整性校验,那必须使用crc64方式在下载时校验完整性。
  • 下载对象时,只有当待下载对象具有crc64/MD5值时,校验才会生效。
  • 启用crc64/MD5进行数据完整性校验会影响上传下载性能。
表1 校验数据完整性的方式

校验方式

说明

支持的接口

crc64

根据ECMA-182标准计算得出crc64值,通过对比客户端与服务端crc64值判断数据完整性。

分段上传场景,如果所有分段都有crc64值,那么服务端返回的crc64值是整个对象的crc64值。如果有分段没有crc64值,那么服务端将不返回crc64值。

MD5

根据MD5算法得出MD5值,通过对比客户端与服务端MD5判断数据完整性。

分段上传场景,服务端计算得出的MD5值不是对象本身的MD5值,分段上传场景建议使用crc64校验。

普通上传:PutObject、PostObject

上传对象时,OBS会先在客户端计算出对象的crc64/MD5值然后携带上传至OBS,OBS服务端再根据上传的对象内容计算出crc64/MD5值,最终与携带上传的crc64/MD5值进行对比,如果对比结果一致,对象上传成功,否则上传失败。使用crc64/MD5值对上传数据进行完整性校验的示意图如图1所示。

图1 校验上传对象的完整性

下载对象时,OBS会将对象已有的crc64/MD5值与根据下载的对象内容计算出来的crc64/MD5值进行对比,如果对比结果一致,对象下载成功,否则下载失败。使用crc64/MD5值对下载数据进行完整性校验的示意图如图2所示。

图2 校验下载对象的完整性

使用crc64校验上传对象的完整性

OBS支持通过API、SDK(Java SDKPython SDK)使用crc64校验一致性。

使用crc64校验下载对象的完整性

OBS支持通过API、SDK(Java SDKPython SDK)使用crc64校验一致性。

前提条件

待下载对象已有crc64值,如果没有将不会进行完整性校验,对象的crc64值需要在上传的时候计算并设置。

使用MD5校验上传对象的完整性

obsutil、OBS Browser+以及OBS SDK都支持在上传对象时进行完整性校验,您可以根据自己的业务选择任意一种方式进行校验。下面分别介绍了几种方式在上传对象时进行完整性校验的操作指导。

使用MD5校验下载对象的完整性

OBS Browser+、obsutil以及OBS SDK都支持在下载对象时进行完整性校验,您可以根据自己的业务选择任意一种方式进行校验,本文就几种方式如何使用完整性校验进行了详细说明。

前提条件

待下载对象已有MD5值,如果没有MD5值,将不会进行完整性校验,对象的MD5值需要在上传的时候计算并设置。

相关文档