Use the KMS instance SDK client to call the Encrypt and Decrypt APIs to encrypt and decrypt data with a symmetric key.
Prerequisites
Before you begin, ensure that you have:
Initialized a KMS instance SDK client. For instructions, see Initialize the client
A KMS symmetric key (
KeyId)
Complete example
Example walkthrough
Initialize the client
Configure the Config object with the HTTPS protocol, client key credentials, KMS instance endpoint, and CA certificate, then pass it to Client. The KMS instance service only accepts connections over HTTPS. For full initialization details, see Initialize the client.
import com.aliyun.dkms.gcs.openapi.models.Config;
import com.aliyun.dkms.gcs.sdk.Client;
public static void initClient() throws Exception {
// The connection protocol. Set the value to https. The KMS instance service only allows access through the HTTPS protocol.
Config config = new Config();
config.setProtocol("https");
// Client key.
config.setClientKeyFile("<CLIENT_KEY_FILE>");
// Client key password.
config.setPassword("<PASSWORD>");
// The endpoint of your KMS instance. Set the value in the following format: <KMS_INSTANCE_ID>.cryptoservice.kms.aliyuncs.com.
config.setEndpoint("<ENDPOINT>");
// The certificate authority (CA) certificate of the KMS instance. You can specify the path to the CA certificate file or enter the content of the CA certificate.
config.setCaFilePath("<CA_CERTIFICATE_PATH>");
// Alternatively, set the content of the CA certificate of the KMS instance.
//config.setCa("<CA_CERTIFICATE_CONTENT");
client = new Client(config);
}Encrypt data
Call the Encrypt API to encrypt plaintext using a symmetric key.
After a successful call, store the resulting CiphertextBlob, KeyId, Iv, and Algorithm from the response. You must supply all four fields when calling Decrypt.
// Encryption example.
private static AesEncryptContext encryptSample(String keyId, String plaintext) {
// Construct the encryption request.
EncryptRequest encryptRequest = new EncryptRequest();
encryptRequest.setKeyId(keyId);
encryptRequest.setPlaintext(plaintext.getBytes(StandardCharsets.UTF_8));
try {
// Call the encryption interface to encrypt.
// To ignore the server certificate, you can use the commented code here to call.
//RuntimeOptions runtimeOptions = new RuntimeOptions();
//runtimeOptions.setIgnoreSSL(true);
//EncryptResponse encryptResponse = client.encryptWithOptions(encryptRequest, runtimeOptions);
EncryptResponse encryptResponse = client.encrypt(encryptRequest);
System.out.printf("KeyId: %s%n", encryptResponse.getKeyId());
System.out.printf("CiphertextBlob: %s%n", Arrays.toString(encryptResponse.getCiphertextBlob()));
System.out.printf("Iv: %s%n", Arrays.toString(encryptResponse.getIv()));
return new AesEncryptContext(encryptResponse.getKeyId(), encryptResponse.getCiphertextBlob(), encryptResponse.getIv(), encryptResponse.getAlgorithm());
} catch (TeaException e) {
System.out.printf("code: %s%n", ((TeaException) e).getCode());
System.out.printf("message: %s%n", e.getMessage());
System.out.printf("requestId: %s%n", ((TeaException) e).getData().get("requestId"));
e.printStackTrace();
throw new RuntimeException(e);
} catch (Exception e) {
System.out.printf("encrypt err: %s%n", e.getMessage());
e.printStackTrace();
throw new RuntimeException(e);
}
}Decrypt ciphertext
Call the Decrypt API to recover the original plaintext. Pass the KeyId, CiphertextBlob, Algorithm, and Iv values returned by the Encrypt call.
// Decryption example.
private static String decryptSample(final AesEncryptContext aesEncryptContext) {
// Construct the decryption request object.
DecryptRequest decryptRequest = new DecryptRequest();
decryptRequest.setKeyId(aesEncryptContext.getKeyId());
decryptRequest.setCiphertextBlob(aesEncryptContext.getCiphertextBlob());
decryptRequest.setAlgorithm(aesEncryptContext.getAlgorithm());
decryptRequest.setIv(aesEncryptContext.getIv());
try {
// Call the decryption interface to decrypt.
// To ignore the server certificate, you can use the commented code here to call.
//RuntimeOptions runtimeOptions = new RuntimeOptions();
//runtimeOptions.setIgnoreSSL(true);
//DecryptResponse decryptResponse = client.decryptWithOptions(decryptRequest, runtimeOptions);
DecryptResponse decryptResponse = client.decrypt(decryptRequest);
System.out.printf("KeyId: %s%n", decryptResponse.getKeyId());
System.out.printf("Plaintext: %s%n", new String(decryptResponse.getPlaintext()));
System.out.printf("RequestId: %s%n", decryptResponse.getRequestId());
return new String(decryptResponse.getPlaintext());
} catch (TeaException e) {
System.out.printf("code: %s%n", ((TeaException) e).getCode());
System.out.printf("message: %s%n", e.getMessage());
System.out.printf("requestId: %s%n", ((TeaException) e).getData().get("requestId"));
e.printStackTrace();
throw new RuntimeException(e);
} catch (Exception e) {
System.out.printf("decrypt err: %s%n", e.getMessage());
e.printStackTrace();
throw new RuntimeException(e);
}
}