客户端加密接口详情(Python SDK)
客户端加密示例
完整示例代码参考示例代码
初始化 CryptoCipher
OBS Python SDK 提供两种 CryptoCipher。您可根据使用场景自行选择。
CtrRSACipherGenerator 需要提供一个 RSA 公钥或 RSA 私钥,用以加密随机生产的数据密钥。
方法定义
CtrRSACipherGenerator(master_crypto_key_path, master_key_info=None, need_sha256=False)
接口参数
| 
        参数名称  | 
      
        参数类型  | 
      
        是否必选  | 
      
        描述  | 
     
|---|---|---|---|
| 
        master_crypto_key_path  | 
      
        str  | 
      
        必选  | 
      
        参数解释: RSA 密钥文件的路径。 默认取值: 无  | 
     
| 
        master_key_info  | 
      
        str  | 
      
        可选  | 
      
        参数解释: 密钥信息,该信息会存至对象的自定义元数据中, 帮助您区分不同crypto_key,需您自行维护 master_key_info 与 crypto_key 的映射关系。 默认取值: 无  | 
     
| 
        need_sha256  | 
      
        bool  | 
      
        可选  | 
      
        参数解释: 是否校验加密后数据的sha256,并设置加密前后的sha256作为自定义元数据。 
         说明: 
         
       为了节省内存开销,SDK 采用了流式计算的方法,这也就意味着,普通上传时需要读取并加密文件两次;在另外由于断点续传上传接口为分段上传接口的封装,在断点续传下,则需要读取并加密文件三次。 取值范围: True:校验加密后数据的sha256,SDK自动计算待上传对象的加密前 sha256 值与加密后的 sha256 值,并存至对象自定义元数据,同时也会在发送请求时置于请求头,服务端收到请求后会计算收到对象的 sha256,如果 sha256 不一致会返回错误信息。 False:不校验加密后数据的sha256。 默认取值: False  | 
     
CTRCipherGenerator 仅需提供一个数据密钥,所有对象均使用该数据密钥进行加密。
方法定义
CTRCipherGenerator(crypto_key, master_key_info=None, crypto_iv=None, need_sha256=False)
接口参数
| 
        参数名称  | 
      
        参数类型  | 
      
        是否必选  | 
      
        描述  | 
     
|---|---|---|---|
| 
        crypto_key  | 
      
        str or bytes  | 
      
        必选  | 
      
        参数解释: 加密数据所使用的数据密钥。 约束限制: 
 默认取值: 无  | 
     
| 
        master_key_info  | 
      
        str  | 
      
        可选  | 
      
        参数解释: 密钥信息,该信息会存至对象的自定义元数据中, 帮助您区分不同crypto_key,需您自行维护 master_key_info 与 crypto_key 的映射关系。 默认取值: 无  | 
     
| 
        crypto_iv  | 
      
        str or bytes  | 
      
        可选  | 
      
        参数解释: 加密数据时所使用的初始值。 约束限制: 
 默认取值: 无  | 
     
| 
        need_sha256  | 
      
        bool  | 
      
        可选  | 
      
        参数解释: 是否校验加密后数据的sha256,并设置加密前后的sha256作为自定义元数据。 
         说明: 
         
       为了节省内存开销,SDK 采用了流式计算的方法,这也就意味着,普通上传时需要读取并加密文件两次;在另外由于断点续传上传接口为分段上传接口的封装,在断点续传下,则需要读取并加密文件三次。 取值范围: True:校验加密后数据的sha256,SDK自动计算待上传对象的加密前 sha256 值与加密后的 sha256 值,并存至对象自定义元数据,同时也会在发送请求时置于请求头,服务端收到请求后会计算收到对象的 sha256,如果 sha256 不一致会返回错误信息。 False:不校验加密后数据的sha256。 默认取值: False  | 
     
CryptoClient(access_key_id,secret_access_key,server,cipher_generator=your-cipher_generator, *args, **kwargs)
接口参数
| 
       参数  | 
     
       描述  | 
     
       建议值  | 
    
|---|---|---|
| 
       access_key_id  | 
     
       参数解释: 访问密钥中的AK。 默认取值: 空字符串,表示匿名用户  | 
     
       N/A  | 
    
| 
       secret_access_key  | 
     
       参数解释: 访问密钥中的SK。 默认取值: 空字符串,表示匿名用户  | 
     
       N/A  | 
    
| 
       server  | 
     
       参数解释: 连接OBS的服务地址。可包含协议类型、域名、端口号。示例:https://your-endpoint:443。(出于安全性考虑,建议使用https协议)。 默认取值: 无  | 
     
       N/A  | 
    
| 
       cipher_generator  | 
     
       参数解释: 该加密客户端所使用的 cipher_generator。 取值范围: 默认取值: 无  | 
     
       N/A  | 
    
CryptoClient.initiateEncryptedMultipartUpload(bucketName, objectKey, crypto_cipher, *args, **kwargs)
接口参数
| 
       参数名称  | 
     
       参数类型  | 
     
       是否必选  | 
     
       描述  | 
    
|---|---|---|---|
| 
       bucketName  | 
     
       str  | 
     
       必选  | 
     
       参数解释: 桶名。 约束限制: 
 默认取值: 无  | 
    
| 
       objectKey  | 
     
       str  | 
     
       必选  | 
     
       参数解释: 对象名。对象名是对象在存储桶中的唯一标识。对象名是对象在桶中的完整路径,路径中不包含桶名。 例如,您对象的访问地址为examplebucket.obs.cn-north-4.myhuaweicloud.com/folder/test.txt 中,对象名为folder/test.txt。 取值范围: 长度大于0且不超过1024的字符串。 默认取值: 无 
        说明: 
        对象链接地址格式为:https://桶名.域名/文件夹目录层级/对象名。如果该对象存在于桶的根目录下,则链接地址将不需要有文件夹目录层级。  | 
    
| 
       crypto_cipher  | 
     
       OBSCipher  | 
     
       必选  | 
     
       参数解释: 调用 cipher_generator.new() 方法所生成的 OBSCipher,在初始化任务时设置必要的元数据。 取值范围: cipher_generator.new() ,cipher_generator为初始化时的cipher_generator参数。 示例:cipher = ctr_client.cipher_generator.new(""),ctr_client为加密客户端。 默认取值: 无  | 
    
上传加密段
上传加密段继承自普通 OBS Client 的上传段接口,详细参数可参考分段上传-上传段(Python SDK)
方法定义
CryptoClient.initiateEncryptedMultipartUpload(bucketName, objectKey, partNumber, uploadId, crypto_cipher, *args, **kwargs)
接口参数
| 
        参数名称  | 
      
        参数类型  | 
      
        是否必选  | 
      
        描述  | 
     
|---|---|---|---|
| 
        bucketName  | 
      
        str  | 
      
        必选  | 
      
        参数解释: 桶名。 约束限制: 
 默认取值: 无  | 
     
| 
        objectKey  | 
      
        str  | 
      
        必选  | 
      
        参数解释: 对象名。对象名是对象在存储桶中的唯一标识。对象名是对象在桶中的完整路径,路径中不包含桶名。 例如,您对象的访问地址为examplebucket.obs.cn-north-4.myhuaweicloud.com/folder/test.txt 中,对象名为folder/test.txt。 取值范围: 长度大于0且不超过1024的字符串。 默认取值: 无 
         说明: 
         对象链接地址格式为:https://桶名.域名/文件夹目录层级/对象名。如果该对象存在于桶的根目录下,则链接地址将不需要有文件夹目录层级。  | 
     
| 
        partNumber  | 
      
        int  | 
      
        必选  | 
      
        参数解释: 段号。 取值范围: [1,10000] 默认取值: 无  | 
     
| 
        uploadId  | 
      
        str  | 
      
        必选  | 
      
        参数解释: 分段上传任务的ID。任务ID可以通过初始化分段上传任务生成。例如:000001648453845DBB78F2340DD460D8。 约束限制: 长度为32的字符串。 默认取值: 无  | 
     
| 
        crypto_cipher  | 
      
        OBSCipher  | 
      
        必选  | 
      
        参数解释: 调用 cipher_generator.new() 方法所生成的 OBSCipher 取值范围: cipher_generator.new() ,cipher_generator为初始化时的cipher_generator参数。 示例:cipher = ctr_client.cipher_generator.new(""),ctr_client为加密客户端。 默认取值: 无  | 
     
相关链接
- 使用过程中返回的错误码含义、问题原因及处理措施可参考OBS错误码。