全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

KS3托管密钥的服务器端加密(Java)

最近更新时间:2025-01-03 17:15:39

KS3目前支持两种加密方式:

  • KS3托管密钥的服务器端加密 (SSE-S3) :由KS3服务端自动生成秘钥,KS3服务端加密使用256位高级加密标准 (AES-256)来加密您的数据。

  • 客户提供密钥的服务器端加密 (SSE-C) :客户自己提供和管理秘钥的方式,上传文件时客户需提供秘钥,操作或下载文件时客户也需提供正确秘钥才能访问成功。

本文主要介绍KS3托管密钥的服务器端加密方式使用示例。

上传文件(PUT ObjectInitiate Multipart UploadPUT Object Copy等)需设置加密算法值为 AES256;获取文件(HEAD ObjectGET Object等)无需设置加密算法,若响应结果中包含sseAlgorithm = "AES256",则表示该文件使用了服务端加密。

public void serverSideEncryptionSample() throws IOException {
        // 初始化 ks3 client,详见"初始化"文档
        Ks3Client ks3Client = initClient();
        String bucketName = "<your-bucket>";
        String objectKey = "sse-test-object";
        byte[] bytes = "this is a test file".getBytes(StandardCharsets.UTF_8);

        // put object,使用服务端加密
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectKey, new ByteArrayInputStream(bytes));
        // 设置加密算法,值为 AES256
        putObjectRequest.getObjectMeta().setSseAlgorithm("AES256");
        PutObjectResult putObjectResult = ks3Client.putObject(putObjectRequest);
        System.out.println("algorithm: " + putObjectResult.getSseAlgorithm());

        // head object,无需设置加密算法
        HeadObjectRequest headObjectRequest = new HeadObjectRequest(bucketName, objectKey);
        HeadObjectResult headObjectResult = ks3Client.headObject(headObjectRequest);
        // 请求服务端加密的文件,响应头中包含加密算法,值为 AES256
        System.out.println("algorithm: " + headObjectResult.getObjectMetadata().getSseAlgorithm());

        // get object,无需设置加密算法
        GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, objectKey);
        GetObjectResult object = ks3Client.getObject(getObjectRequest);
        AutoAbortInputStream inputStream = object.getObject().getObjectContent();
        String content = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
        System.out.println("object content: " + content);
        // 请求服务端加密的文件,响应头中包含加密算法,值为 AES256
        System.out.println("algorithm: " + object.getObject().getObjectMetadata().getSseAlgorithm());
        inputStream.close();

        // init multipart upload
        String objectKey2 = "sse-test-object-2";
        InitiateMultipartUploadRequest initiateMultipartUploadRequest = new InitiateMultipartUploadRequest(bucketName, objectKey2);
        // 设置加密算法,值为 AES256
        initiateMultipartUploadRequest.getObjectMeta().setSseAlgorithm("AES256");
        InitiateMultipartUploadResult initiateMultipartUploadResult = ks3Client.initiateMultipartUpload(initiateMultipartUploadRequest);
        String uploadId = initiateMultipartUploadResult.getUploadId();
        System.out.println("upload id: " + uploadId);
        // 响应头中包含加密算法,值为 AES256
        System.out.println("algorithm: " + initiateMultipartUploadResult.getSseAlgorithm());

        // upload part,无需设置加密算法请求头
        UploadPartRequest uploadPartRequest = new UploadPartRequest(bucketName, objectKey2, uploadId, 1, new ByteArrayInputStream(bytes), bytes.length);
        PartETag partETag = ks3Client.uploadPart(uploadPartRequest);
        // 响应头中包含加密算法,值为 AES256
        System.out.println("algorithm: " + partETag.getSseAlgorithm());

        // complete multipart upload,无需设置加密算法请求头
        CompleteMultipartUploadRequest completeMultipartUploadRequest = new CompleteMultipartUploadRequest(bucketName, objectKey2, uploadId, Arrays.asList(partETag));
        CompleteMultipartUploadResult completeMultipartUploadResult = ks3Client.completeMultipartUpload(completeMultipartUploadRequest);
        // 响应头中包含加密算法,值为 AES256
        System.out.println("algorithm: " + completeMultipartUploadResult.getSseAlgorithm());

        // copy object
        CopyObjectRequest copyObjectRequest = new CopyObjectRequest(bucketName, objectKey2 + "-copy", bucketName, objectKey2);
        ObjectMetadata objectMetadata = new ObjectMetadata();
        // 设置加密算法,值为 AES256
        objectMetadata.setSseAlgorithm("AES256");
        copyObjectRequest.setNewObjectMetadata(objectMetadata);
        CopyResult copyResult = ks3Client.copyObject(copyObjectRequest);
        System.out.println("copy result: " + copyResult);
    }

文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈