Use o cliente SDK de instância do KMS para chamar as APIs Encrypt e Decrypt para criptografia e descriptografia com chave simétrica. Esta página apresenta um exemplo completo em PHP, seguido de uma explicação passo a passo.
Pré-requisitos
Antes de começar, verifique se você tem:
Uma instância do KMS com uma chave mestra simétrica (CMK) criada
Uma ClientKey obtida no gerenciamento de aplicativos do KMS
O SDK de instância do KMS para PHP instalado
Para obter detalhes sobre a inicialização do cliente, consulte Inicializar o cliente.
Como funciona
O fluxo de criptografia e descriptografia consiste em três etapas:
Inicialize o cliente SDK de instância do KMS com sua ClientKey e o endpoint da instância.
Chame a API
Encryptfornecendo o texto simples. A resposta inclui o texto cifrado e um vetor de inicialização (IV).Chame a API
Decryptinformando o texto cifrado, o algoritmo e o IV retornado na resposta de criptografia.
Salve o campo iv da resposta de criptografia. A API Decrypt exige exatamente o mesmo IV usado durante a criptografia. Sem ele, a descriptografia falhará.
Exemplo completo
Explicação do exemplo
As seções a seguir detalham o exemplo completo em três partes. Os trechos de código foram extraídos do exemplo completo apresentado acima.
Inicializar o cliente
Consulte Inicializar o cliente para obter todos os detalhes. O trecho relevante do exemplo completo é:
<?php
use AlibabaCloud\Dkms\Gcs\Sdk\Client as AlibabaCloudDkmsGcsSdkClient;
use AlibabaCloud\Dkms\Gcs\OpenApi\Models\Config as AlibabaCloudDkmsGcsOpenApiConfig;
function getDkmsGcsSdkClient()
{
global $clientKeyContent, $password, $endpoint;
$config = new AlibabaCloudDkmsGcsOpenApiConfig();
$config->protocol = 'https'; // KMS instance only allows HTTPS
$config->clientKeyContent = $clientKeyContent;
$config->password = $password; // ClientKey security token
$config->endpoint = $endpoint; // Format: <instance-id>.cryptoservice.kms.aliyuncs.com
$config->caFilePath = 'path/to/caCert.pem';
return new AlibabaCloudDkmsGcsSdkClient($config);
}
Chamar a API Encrypt para criptografar dados com uma chave simétrica
function aesEncryptSample($client, $keyId, $plaintext, $algorithm)
{
$encryptRequest = new EncryptRequest();
$encryptRequest->keyId = $keyId;
$encryptRequest->algorithm = $algorithm;
$encryptRequest->plaintext = AlibabaCloudTeaUtils::toBytes($plaintext);
$runtimeOptions = new RuntimeOptions();
// Uncomment the following line to skip SSL certificate verification (not recommended for production).
// $runtimeOptions->ignoreSSL = true;
try {
$encryptResponse = $client->encryptWithOptions($encryptRequest, $runtimeOptions);
var_dump($encryptResponse->toMap());
// Save all four fields — you need them to decrypt the ciphertext later.
return new AesEncryptContext([
'keyId' => $encryptResponse->keyId,
'iv' => $encryptResponse->iv, // Required by Decrypt
'ciphertextBlob' => $encryptResponse->ciphertextBlob,
'algorithm' => $encryptResponse->algorithm,
]);
} catch (\Exception $error) {
if ($error instanceof \AlibabaCloud\Tea\Exception\TeaError) {
var_dump($error->getErrorInfo());
}
var_dump($error->getMessage());
var_dump($error->getTraceAsString());
}
return null;
}
Chamar a API Decrypt para descriptografar o texto cifrado com uma chave simétrica
function aesDecryptSample($client, $ctx)
{
$decryptRequest = new DecryptRequest();
$decryptRequest->keyId = $ctx->keyId;
$decryptRequest->ciphertextBlob = $ctx->ciphertextBlob;
$decryptRequest->algorithm = $ctx->algorithm;
$decryptRequest->iv = $ctx->iv; // Must match the IV from encryption
$runtimeOptions = new RuntimeOptions();
// Uncomment the following line to skip SSL certificate verification (not recommended for production).
// $runtimeOptions->ignoreSSL = true;
try {
$decryptResponse = $client->decryptWithOptions($decryptRequest, $runtimeOptions);
var_dump($decryptResponse->toMap());
return $decryptResponse->plaintext;
} catch (\Exception $error) {
if ($error instanceof \AlibabaCloud\Tea\Exception\TeaError) {
var_dump($error->getErrorInfo());
}
var_dump($error->getMessage());
var_dump($error->getTraceAsString());
}
return null;
}