对象存储服务 OBS-客户端加密接口(Java SDK):示例代码

时间:2025-02-12 15:02:48

示例代码

这是CtrRSACipherGenerator的示例代码:
  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99100101102103104
import com.obs.services.ObsConfiguration;import com.obs.services.crypto.CTRCipherGenerator;import com.obs.services.crypto.CryptoObsClient;import com.obs.services.crypto.CtrRSACipherGenerator;import com.obs.services.exception.ObsException;import com.obs.services.model.GetObjectRequest;import com.obs.services.model.ObsObject;import com.obs.services.model.PutObjectResult;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.security.NoSuchAlgorithmException;import java.security.PrivateKey;import java.security.PublicKey;import java.security.spec.InvalidKeySpecException;public class CtrRSACipherGeneratorDemo001 {    public static void main(String[] args) {        // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。        // 您可以登录访问管理控制台获取访问密钥AK/SK        String ak = System.getenv("AC CES S_KEY_ID");        String sk = System.getenv("SECRET_ACCESS_KEY_ID");        // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。        // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。        // String securityToken = System.getenv("SECURITY_TOKEN");        // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。        String endPoint = "https://obs.cn-north-4.myhuaweicloud.com";        // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。        //String endPoint = System.getenv("ENDPOINT");        CtrRSACipherGenerator ctrRSACipherGenerator = null;        try {            String examplePrivateKeyPath = "yourRSAPrivateKeyPath";            String examplePublicKeyPath = "yourRSAPublicKeyPath";            ObsConfiguration config = new ObsConfiguration();            PrivateKey privateKeyObj = CtrRSACipherGenerator.importPK CS 8PrivateKey(examplePrivateKeyPath);            PublicKey publicKeyObj = CtrRSACipherGenerator.importPublicKey(examplePublicKeyPath);            ctrRSACipherGenerator =                    new CtrRSACipherGenerator(                            "example_master_key_info", true, config.getSecureRandom(), privateKeyObj, publicKeyObj);        } catch (IllegalArgumentException | IOException | NoSuchAlgorithmException | InvalidKeySpecException e) {            e.printStackTrace();        }        assert ctrRSACipherGenerator != null;        // 创建ObsClient实例        try (CryptoObsClient cryptoObsClient = new CryptoObsClient(ak, sk, securityToken, endPoint, ctrRSACipherGenerator)) {            String exampleBucketName = "example-bucket";            String exampleObjectKey = "exampleObjectKey";            String examplePlainTextFilePath = "examplePlainTextFilePath";            String exampleDecryptedFilePath = "exampleDecryptedFilePath";            PutObjectResult putObjectResult =                    cryptoObsClient.putObject(exampleBucketName, exampleObjectKey, new File(examplePlainTextFilePath));            System.out.println("HTTP Code: " + putObjectResult.getStatusCode());            System.out.println("Etag: " + putObjectResult.getEtag());            // 客户端加密上传成功            System.out.println("CtrRSACipherGeneratorDemo001 putObject successfully");            GetObjectRequest getObjectRequest = new GetObjectRequest(exampleBucketName, exampleObjectKey);            ObsObject obsObject = cryptoObsClient.getObject(getObjectRequest);            InputStream input = obsObject.getObjectContent();            byte[] b = new byte[1024];            FileOutputStream fileOutputStream = new FileOutputStream(exampleDecryptedFilePath);            int len;            while ((len = input.read(b)) != -1) {                fileOutputStream.write(b, 0, len);            }            fileOutputStream.close();            input.close();            System.out.println("HTTP Code: " + obsObject.getMetadata().getStatusCode());            // 客户端解密下载成功            System.out.println("CtrRSACipherGeneratorDemo001 getObject successfully");            // 验证加密之前的文件和解密之后的文件是否一致            byte[] plainTextFileSha256 = CTRCipherGenerator.getFileSha256Bytes(examplePlainTextFilePath);            byte[] decryptedFileSha256 = CTRCipherGenerator.getFileSha256Bytes(exampleDecryptedFilePath);            String plainTextFileSha256Base64Encoded = CTRCipherGenerator.getBase64Info(plainTextFileSha256);            String decryptedFileSha256Base64Encoded = CTRCipherGenerator.getBase64Info(decryptedFileSha256);            System.out.println("plainTextFileSha256 base64 encoded: " + plainTextFileSha256Base64Encoded);            System.out.println("decryptedFileSha256 base64 encoded: " + decryptedFileSha256Base64Encoded);            System.out.println(                    "plainTextFileSha256 equals decryptedFileSha256 ? "                            + decryptedFileSha256Base64Encoded.equals(plainTextFileSha256Base64Encoded));            System.out.println("CtrRSACipherGeneratorDemo001 successfully");        } catch (ObsException e) {            System.out.println("CtrRSACipherGeneratorDemo001 failed");            // 请求失败,打印http状态码            System.out.println("HTTP Code: " + e.getResponseCode());            // 请求失败,打印服务端错误码            System.out.println("Error Code:" + e.getErrorCode());            // 请求失败,打印详细错误信息            System.out.println("Error Message: " + e.getErrorMessage());            // 请求失败,打印请求id            System.out.println("Request ID:" + e.getErrorRequestId());            System.out.println("Host ID:" + e.getErrorHostId());        } catch (Exception e) {            System.out.println("CtrRSACipherGeneratorDemo001 putObject failed");            // 其他异常信息打印            e.printStackTrace();        }    }}
support.huaweicloud.com/sdk-java-devg-obs/obs_21_2303.html