数据安全性
OSS提供基于MD5和CRC64的数据校验,确保上传、下载和拷贝文件(Object)过程中的数据完整性。
MD5校验
如果上传文件时设置了Content-MD5,OSS会根据接收的内容计算MD5。OSS计算的MD5值和上传提供的MD5值不一致时,则返回InvalidDigest,从而保证数据的完整性。
以下代码用于上传文件时进行MD5校验:
# -*- coding: utf-8 -*-
import oss2
# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以杭州为例,其它Region请按实际情况填写。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')
object_name = '<yourObjectName>'
content = '<yourContent>'
# 计算上传内容的md5。
content_md5 = oss2.utils.content_md5(content);
print('content_md5', content_md5)
# 上传请求中携带'Content-MD5' header。服务器将会校验上传内容的md5。
headers = dict()
headers['Content-MD5'] = content_md5
bucket.put_object(object_name, content, headers=headers)
说明 put_object、append_Object、post_Object、upload_part支持MD5校验。
CRC64校验
说明
- put_object、get_object、append_object、upload_part支持CRC64校验。上传文件时默认开启CRC 校验,如果客户端计算的CRC值与服务端返回的CRC值不一致, 则会抛出InconsistentError异常。
- 范围下载不支持CRC64校验。
- CRC64校验会占用一定的CPU,对上传、下载速度均会有影响。
- 下载文件时CRC64校验
# -*- coding: utf-8 -*- import oss2 # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。 auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>') # Endpoint以杭州为例,其它Region请按实际情况填写。 bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>') object_name = '<yourObjectName>' # 查看是否已默认开启crc校验。 print('bucket.enable-crc:', bucket.enable_crc) # bucket.get_object的返回值是一个类文件对象(File-Like Object),同时也是一个可迭代对象(Iterable)。 object_stream = bucket.get_object(object_name) print(object_stream.read()) # 由于get_object接口返回的是一个stream流,需要执行read()后才能计算出返回Object数据的CRC checksum,因此需要在调用该接口后做CRC校验。 if object_stream.client_crc != object_stream.server_crc: print "The CRC checksum between client and server is inconsistent!"
- 追加上传时CRC64校验
追加上传时,如果指定了init_crc参数,则默认开启CRC64校验。
# -*- coding: utf-8 -*- import oss2 # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。 auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>') # Endpoint以杭州为例,其它Region请按实际情况填写。 bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>') object_name = "<yourAppendObjectName>" first_content = "<yourFirstContent>" second_content = "<yourSecondContent>" # 第一次追加上传。 # 在指定了init_crc的情况下,SDK默认会对返回结果进行crc校验。 result = bucket.append_object(object_name, 0, first_content, init_crc=0) # 第二次追加上传。 # 指定init_crc为已上传数据的crc。 result = bucket.append_object(object_name, result.next_position, second_content, init_crc=result.crc)
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论