Use o cliente SDK da instância KMS para chamar as APIs Encrypt e Decrypt e criptografar ou descriptografar dados com chaves simétricas. Os exemplos nesta página usam Python 3.
Código source completo no GitHub:
Python 3: aes_encrypt_decrypt_sample.py
Python 2: aes_encrypt_decrypt_sample.py
Exemplo completo
Detalhamento do exemplo
Inicialize o cliente
Antes de chamar qualquer API, configure o cliente com as credenciais da sua instância KMS. O serviço da instância KMS exige HTTPS. Defina config.protocol como "https" antes de criar o cliente.
Substitua os placeholders abaixo pelos valores reais:
|
Placeholder |
Descrição |
|
|
Caminho para o arquivo da sua Client Key. A Client Key é o arquivo de credencial usado para autenticação na instância KMS. |
|
|
Nome da variável de ambiente que contém a senha de descriptografia da sua Client Key. |
|
|
Endpoint da sua instância KMS no formato |
Para mais detalhes, consulte Inicializar o cliente.
# -*- coding: utf-8 -*-
from openapi.models import Config
from sdk.client import Client
config = Config()
# The connection protocol. Set the value to https. The KMS instance service only allows access through the HTTPS protocol.
config.protocol = "https"
# Client Key.
config.client_key_file = "<CLIENT_KEY_FILE>"
# Client Key decryption password.
config.password = os.getenv('CLIENT_KEY_PASSWORD')
# The endpoint of your KMS instance. Set the value in the following format: <ID of your KMS instance>.cryptoservice.kms.aliyuncs.com.
config.endpoint = "<ENDPOINT>"
client = Client(config)
Chame a API Encrypt para criptografar dados com uma chave simétrica
A função encrypt envia um valor de texto simples e um ID de chave para a API Encrypt. Essa API retorna um blob de texto cifrado, o vetor de inicialização (iv) e o algoritmo de criptografia utilizado. Como todos os três valores são necessários para descriptografar o texto cifrado posteriormente, armazene todo o objeto AESEncryptContext junto com seus dados criptografados.
Defina runtime_options.verify com o caminho do certificado CA da sua instância KMS para verifique a conexão HTTPS. Para ignorar a verificação de certificado durante o desenvolvimento, descomente runtime_options.ignore_ssl = True.
def encrypt(key_id, plaintext):
request = EncryptRequest()
request.plaintext = plaintext
request.key_id = key_id
runtime_options = RuntimeOptions()
# Ignore server certificate.
# runtime_options.ignore_ssl = True
# verify indicates the path of the instance CA certificate.
runtime_options.verify = "<CA_CERTIFICATE_FILE_PATH>"
resp = client.encrypt_with_options(request, runtime_options)
print(resp)
return AESEncryptContext(resp.key_id, resp.ciphertext_blob, resp.iv, resp.algorithm)
Chame a API Decrypt para descriptografar texto cifrado com uma chave simétrica
A função decrypt passa o objeto AESEncryptContext completo — incluindo o blob de texto cifrado, o ID da chave, o vetor de inicialização e o algoritmo — para a API Decrypt. Os valores de iv e algorithm devem corresponder exatamente ao que a API Encrypt retornou, pois a instância KMS os utiliza para reconstruir o texto simples original.
def decrypt(context):
request = DecryptRequest()
request.ciphertext_blob = context.ciphertext_blob
request.key_id = context.key_id
request.iv = context.iv
request.algorithm = context.algorithm
runtime_options = RuntimeOptions()
# Ignore server certificate.
# runtime_options.ignore_ssl = True
# verify indicates the path of the instance CA certificate.
runtime_options.verify = "<CA_CERTIFICATE_FILE_PATH>"
resp = client.decrypt_with_options(request, runtime_options)
print(resp)