Java SDK提供了数据完整性校验、服务器端加密、客户端加密等方法,来保证您在上传、下载和拷贝过程中数据的安全性。

数据完整性校

Java SDK提供基于MD5和CRC的数据校验,确保上传、下载和拷贝过程中的数据完整性。

  • MD5

    如果上传时设置了Content-MD5,OSS会根据接收的内容计算MD5。OSS计算的MD5值和上传提供的MD5值不一致时,则返回InvalidDigest。从而保证数据的完整性。

    以下代码用于上传时进行MD5校验:

    // Endpoint以杭州为例,其它Region请按实际情况填写。
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    
    // 创建OSSClient实例。
    OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    
    // 上传字符串。
    String content = "Hello OSS";
    
    ObjectMetadata meta = new ObjectMetadata();
    // 设置MD5校验。
    String md5 = BinaryUtil.toBase64String(BinaryUtil.calculateMd5(content.getBytes()));
    meta.setContentMD5(md5);
    
    ossClient.putObject("<yourBucketName>", "<yourObjectName>", new ByteArrayInputStream(content.getBytes()), meta);
    
    // 关闭OSSClient。
    ossClient.shutdown();
    
    说明 putObject、getObject、appendObject、postObject、uploadPart支持MD5校验。
  • CRC64

    上传、下载和拷贝文件时默认开启CRC数据校验,确保数据的完整性。

    以下代码用于上传时查看CRC数据校验是否生效:

    // Endpoint以杭州为例,其它Region请按实际情况填写。
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    
    // 创建OSSClient实例。
    OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    
    // 上传字符串。
    String content = "Hello OSS";
    
    PutObjectResult result = ossClient.putObject("<yourBucketName>", "<yourObjectName>", new ByteArrayInputStream(content.getBytes()));
    
    // 判断是否开启CRC校验,true为开启,false为关闭。
    if (ossClient.getClientConfiguration().isCrcCheckEnabled()) {
    	// 通过响应结果查看CRC校验是否生效。
        OSSUtils.checkChecksum(result.getClientCRC(), result.getServerCRC(), result.getRequestId());
     }
    // 关闭OSSClient。
    ossClient.shutdown();
    
    说明
    • putObject、getObject、appendObject、uploadPart支持CRC64校验。
    • CRC64校验会占用一定的CPU,上传、下载速度会有影响。

服务器端加密

上传文件时,设置元信息中serverSideEncryption参数为AES256或KMS,即可实现该文件在服务器端加密存储。更多信息请参见开发指南中的服务器端加密编码

以下代码用于上传时设置服务器端加密:

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";

// 创建OSSClient实例。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);

// 上传字符串。
String content = "Hello OSS";

ObjectMetadata meta = new ObjectMetadata();
// 指定此文件在服务器端的加密编码为AES256。
meta.setServerSideEncryption(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);

ossClient.putObject("<yourBucketName>", "<yourObjectName>", new ByteArrayInputStream(content.getBytes()), meta);

// 关闭OSSClient。
ossClient.shutdown();

客户端加密

如需客户端加密,您可将数据在本地加密,然后上传到OSS,并在下载到本地后解密。详情请参见开发指南中的客户端加密SDK介绍