Use o cliente SDK da instância KMS para chamar as APIs Encrypt e Decrypt e criptografar ou descriptografar dados com uma chave simétrica.
Pré-requisitos
Antes de começar, verifique se você tem:
Um cliente SDK da instância KMS inicializado. Para obter instruções, consulte Inicializar o cliente.
Uma chave simétrica do KMS (
KeyId).
Siga estas etapas para integrar o SDK da instância KMS para criptografia e descriptografia:
Exemplo completo
Detalhamento do exemplo
Inicializar o cliente
Configure o objeto Config com o protocolo HTTPS, as credenciais da chave do cliente, o endpoint da instância KMS e o certificado CA e passe-o para Client. O serviço da instância KMS aceita apenas conexões via HTTPS. Para obter detalhes completos sobre a inicialização, consulte Inicializar o cliente.
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);
}
Criptografar dados
Chame a API Encrypt para criptografar texto simples com uma chave simétrica.
Após uma chamada bem-sucedida, armazene os valores CiphertextBlob, KeyId, Iv e Algorithm retornados na resposta. Forneça todos esses quatro campos ao chamar 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);
}
}
Descriptografar texto cifrado
Chame a API Decrypt para recuperar o texto simples original. Passe os valores KeyId, CiphertextBlob, Algorithm e Iv retornados pela chamada Encrypt.
// 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);
}
}