Todos os produtos
Search
Central de documentação

Key Management Service:Código de exemplo para criptografia e descriptografia

Última atualização: Jun 27, 2026

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:

Exemplo completo

O exemplo a seguir apresenta as três etapas em sequência: inicializar o cliente, criptografar o texto simples e descriptografar o texto cifrado resultante.

# -*- coding: utf-8 -*-
import os

from openapi.models import Config
from openapi_util.models import RuntimeOptions
from sdk.client import Client
from sdk.models import EncryptRequest, DecryptRequest

config = Config()
# Set the connection protocol 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')
# Set the endpoint to <KMS_INSTANCE_ID>.cryptoservice.kms.aliyuncs.com.
config.endpoint = "<ENDPOINT>"
client = Client(config)

class AESEncryptContext(object):
    """The aes encrypt context may be stored."""

    def __init__(self, key_id, ciphertext_blob, iv, algorithm):
        self.key_id = key_id
        self.ciphertext_blob = ciphertext_blob
        self.iv = iv
        # Use default algorithm value, if the value is not set.
        self.algorithm = algorithm

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)

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)

plaintext = "<PLAINTEXT>".encode("utf-8")
key_id = "<KEY_ID>"
context = encrypt(key_id, plaintext)
decrypt(context)

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

<CLIENT_KEY_FILE>

Caminho para o arquivo da sua Client Key. A Client Key é o arquivo de credencial usado para autenticação na instância KMS.

CLIENT_KEY_PASSWORD

Nome da variável de ambiente que contém a senha de descriptografia da sua Client Key.

<ENDPOINT>

Endpoint da sua instância KMS no formato <KMS_INSTANCE_ID>.cryptoservice.kms.aliyuncs.com.

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)

Próximos passos