专属KMS SDK帮助您通过简单的编程快速访问专属KMS API,实现加密解密、签名验签等业务诉求。本文以Java语言为例,为您介绍如何快速使用专属KMS SDK进行数据加密解密。

前提条件

请确保您已经完成以下操作:
  1. 已经创建专属KMS实例并正常连接密码机,专属KMS实例状态为已连接。具体操作,请参见步骤二:配置专属KMS实例
  2. 已经通过密钥管理控制台为专属KMS实例创建密钥规格为Aliyun_AES_256的对称密钥。具体操作,请参见步骤三:为专属KMS实例创建密钥
  3. 已经获取专属KMS实例服务地址。具体操作,请参见查询专属KMS实例
  4. 已经为专属KMS实例创建应用接入点并获取Client Key。具体操作,请参见创建应用接入点
  5. 已经获取专属KMS实例CA证书。具体操作,请参见获取专属KMS实例CA证书

示例工程

专属KMS SDK支持基于Maven的示例工程。您可以在本地设备上编译、运行示例工程,或者以示例工程为基础开发您的应用。工程的编译和运行方法,请参见alibabacloud-dkms-gcs-java-sdk-example

安装SDK

在项目中添加alibabacloud-dkms-gcs-sdk的依赖,可从Maven仓库中自动下载发布的Java安装包。

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>alibabacloud-dkms-gcs-sdk</artifactId>
  <version>x.x.x</version>
</dependency>
说明 专属KMS SDK当前版本为0.2.0。最新版本,请参见专属KMS SDK for Java

配置CA证书

为保障生产环境通信安全,需要配置Java可信证书。具体操作,请参见配置CA证书

开发环境可使用RuntimeOptions命令临时忽略可信证书的验证。示例代码如下:

import com.aliyun.dkms.gcs.openapi.util.models.RuntimeOptions;

RuntimeOptions runtimeOptions = new RuntimeOptions();
runtimeOptions.setIgnoreSSL(true);
...
client.encryptWithOptions(encryptRequest, runtimeOptions);

数据加解密示例

  • 使用专属KMS实例管理的对称密钥(密钥规格为Aliyun_AES_256)加密敏感数据
    import com.aliyun.dkms.gcs.openapi.models.Config;
    import com.aliyun.dkms.gcs.sdk.Client;
    import com.aliyun.dkms.gcs.sdk.models.*;
    
    // 连接协议,固定为HTTPS。
    String protocol = "https";
    // Endpoint,专属KMS实例服务地址去掉HTTPS。
    String endpoint = "<service_id>.cryptoservice.kms.aliyuncs.com";
    // 专属KMS实例Client Key。
    String clientKey = "<your client key>";
    // 专属KMS实例Client Key解密口令。
    String clientKeyPass = "<your client key password>";
    
    Client client = new Client(new Config()
                               .setProtocol(protocol)
                               .setEndpoint(endpoint)
                               .setClientKeyContent(clientKey)
                               .setPassword(clientKeyPass));
    
    // 专属KMS实例加密密钥的ID或别名(Alias)。
    String aesCipherKeyId = "<your AES cipher key id>";
    // 待加密数据。
    byte[] originData = <your origin data to encrypt>;
    
    EncryptRequest encryptRequest = new EncryptRequest();
    encryptRequest.setKeyId(aesCipherKeyId);
    encryptRequest.setPlaintext(originData);
    
    EncryptResponse encryptResponse = client.encrypt(encryptRequest);
    // 加密数据。
    byte[] cipherData = encryptResponse.getCiphertextBlob();
    // Cipher初始向量,用于解密数据。
    byte[] iv = encryptResponse.getIv();
    // 请求ID。
    String requestId = encryptResponse.getRequestId();
  • 使用专属KMS实例管理的对称密钥(密钥规格为Aliyun_AES_256)解密密文
    // 连接协议,固定为HTTPS。
    String protocol = "https";
    // Endpoint,专属KMS实例服务地址去掉HTTPS。
    String endpoint = "<service_id>.cryptoservice.kms.aliyuncs.com";
    // 专属KMS实例Client Key。
    String clientKey = "<your client key>";
    // 专属KMS实例Client Key解密口令。
    String clientKeyPass = "<your client key password>";
    
    Client client = new Client(new Config()
                               .setProtocol(protocol)
                               .setEndpoint(endpoint)
                               .setClientKeyContent(clientKey)
                               .setPassword(clientKeyPass));
    
    // 专属KMS实例解密密钥的ID或别名(Alias)。
    String aesCipherKeyId = "<your AES cipher key id>";
    // 待解密数据。
    byte[] cipherData = <your cipher data to decrypt>;
    // Cipher初始向量,必须与加密时一致。
    byte[] iv = <IV value>;
    
    DecryptRequest decryptRequest = new DecryptRequest();
            decryptRequest.setKeyId(aesCipherKeyId);
            decryptRequest.setCiphertextBlob(cipherData);
            decryptRequest.setIv(iv);
    
    DecryptResponse decryptResponse = client.decrypt(decryptRequest);
    // 原始数据。
    byte[] originData = decryptResponse.getPlaintext();
    // 请求ID。
    String requestId = decryptResponse.getRequestId();