对象存储服务 OBS-客户端加密接口:初始化 CryptoCipher

时间:2023-11-09 14:48:15

初始化 CryptoCipher

OBS Java SDK 提供两种 加密套件。您可根据使用场景自行选择。

CtrRSACipherGenerator 继承于CTRCipherGenerator,不需要提供数据密钥或初始值,只需要提供 RSA 公钥或RSA 私钥,用以加密和解密随机生成的数据密钥。

表1 CtrRSACipherGenerator 类型参数

参数名

类型

约束

说明

privateKey

PrivateKey

解密文件时必选(例如getObject)

RSA 私钥。

publicKey

PublicKey

加密文件时必选(例如putObject)

RSA 公钥。

masterKeyInfo

String

可选

密钥信息,该信息会存至对象的自定义元数据中, 帮助您区分不同密钥,需您自行维护 masterKeyInfo与 密钥的映射关系.

secureRandom

SecureRandom

必选

安全随机数生成器,用于随机生成cryptoKeyBytes和cryptoIvBytes,请您根据业务需求选择设置

needSha256

boolean

可选

是否校验加密后数据的sha256,并设置加密前后的sha256作为自定义元数据.

说明:

设置 need_sha256 为 True 时,SDK 会自动计算待上传对象的加密前 sha256 值与加密后的 sha256 值,并存至对象自定义元数据,同时也会在发送请求时将加密后的文件的 sha256 值置于请求头,服务端收到请求后会计算收到对象的sha256,如若 sha256 不一致会返回错误信息。

为了节省内存开销,SDK 采用了流式计算sha256的方法,这也就意味着,普通上传时需要读取并加密文件两次;另外由于InputStream流无法重复读取,流式上传不支持计算sha256。

CTRCipherGenerator 仅需提供一个数据密钥,所有对象均使用该数据密钥进行加密。

表2 CTRCipherGenerator 类型参数

参数名

类型

约束

说明

masterKeyInfo

String

可选

密钥信息,该信息会存至对象的自定义元数据中, 帮助您区分不同cryptoKeyBytes,需您自行维护 masterKeyInfo与 cryptoKeyBytes的映射关系.

cryptoKeyBytes

byte[]

必选

加密数据所使用的数据密钥,长度必须为 32 bytes.

cryptoIvBytes

byte[]

可选

加密数据时所使用的初始值,长度必须为 16 bytes,指定时,所有对象均使用该初始值加密;未指定时,SDK 会为每个对象随机生成不同 初始值.

secureRandom

SecureRandom

必选

安全随机数生成器,用于在未设置cryptoKeyBytes或cryptoIvBytes时随机生成缺失的对应参数,请您根据业务需求设置

needSha256

boolean

可选

是否校验加密后数据的sha256,并设置加密前后的sha256作为自定义元数据.

说明:

设置 need_sha256 为 True 时,SDK 会自动计算待上传对象的加密前 sha256 值与加密后的 sha256 值,并存至对象自定义元数据,同时也会在发送请求时将加密后的文件的 sha256 值置于请求头,服务端收到请求后会计算收到对象的sha256,如若 sha256 不一致会返回错误信息。

为了节省内存开销,SDK 采用了流式计算sha256的方法,这也就意味着,普通上传时需要读取并加密文件两次;另外由于InputStream流无法重复读取,流式上传不支持计算sha256。

support.huaweicloud.com/sdk-java-devg-obs/zh-cn_topic_0000001667297210.html