加密和解密Amazon KMS数据密钥使用Amazon SDK for PHP版本 3 - Amazon SDK for PHP
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

加密和解密Amazon KMS数据密钥使用Amazon SDK for PHP版本 3

数据密钥 是可用于加密数据的加密密钥,包括大量数据和其他数据加密密钥。

您可以使用 Amazon Key Management Service (Amazon KMS) 客户主密钥 (CMK) 生成、加密和解密数据密钥。但是,Amazon KMS 不会存储、管理或跟踪您的数据密钥,也不会使用数据密钥执行加密操作。在 Amazon KMS 之外使用和管理数据密钥。

以下示例演示如何:

  • 使用 Encrypt 加密数据密钥。

  • 使用 Decrypt 解密数据密钥。

  • 使用 ReEncrypt 通过新的 CMK 重新加密数据密钥。

Amazon SDK for PHPGitHub 上提供了的所有示例代码。

凭证

运行示例代码之前,请配置Amazon凭证,如中所述设置 凭证. 然后导入Amazon SDK for PHP,如中所述基本用法.

有关如何使用的更多信息Amazon Key Management Service(Amazon KMS),请参阅Amazon KMS开发人员指南.

Encrypt

Encrypt 操作专用于加密数据密钥,但并不常用。GenerateDataKeyGenerateDataKeyWithoutPlaintext 操作会返回加密的数据密钥。你可能会使用Encypt将加密数据移动到新数据时的方法Amazon区域并希望在新区域中使用 CMK 加密数据密钥。

导入

require 'vendor/autoload.php'; use Aws\Kms\KmsClient; use Aws\Exception\AwsException;

示例代码

$KmsClient = new Aws\Kms\KmsClient([ 'profile' => 'default', 'version' => '2014-11-01', 'region' => 'us-east-2' ]); $keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; $message = pack('c*', 1, 2, 3, 4, 5, 6, 7, 8, 9, 0); try { $result = $KmsClient->encrypt([ 'KeyId' => $keyId, 'Plaintext' => $message, ]); var_dump($result); } catch (AwsException $e) { // output error message if fails echo $e->getMessage(); echo "\n"; }

Decrypt

要解密数据密钥,请使用 Decrypt 操作。

您指定的 ciphertextBlob 必须为 CiphertextBlobGenerateDataKeyGenerateDataKeyWithoutPlaintextEncrypt 响应中 字段的值。

导入

require 'vendor/autoload.php'; use Aws\Kms\KmsClient; use Aws\Exception\AwsException;

示例代码

$KmsClient = new Aws\Kms\KmsClient([ 'profile' => 'default', 'version' => '2014-11-01', 'region' => 'us-east-2' ]); $ciphertext = 'Place your cipher text blob here'; try { $result = $KmsClient->decrypt([ 'CiphertextBlob' => $ciphertext, ]); $plaintext = $result['Plaintext']; var_dump($plaintext); } catch (AwsException $e) { // Output error message if fails echo $e->getMessage(); echo "\n"; }

重新加密

要解密已加密数据密钥,然后立即在其他 CMK 下重新加密该数据密钥,请使用 ReEncrypt 操作。这些操作全部都在 Amazon KMS 内的服务器端执行,因此它们永远不会将您的明文在 Amazon KMS 外公开。

您指定的 ciphertextBlob 必须为 CiphertextBlobGenerateDataKeyGenerateDataKeyWithoutPlaintextEncrypt 响应中 字段的值。

导入

require 'vendor/autoload.php'; use Aws\Kms\KmsClient; use Aws\Exception\AwsException;

示例代码

$KmsClient = new Aws\Kms\KmsClient([ 'profile' => 'default', 'version' => '2014-11-01', 'region' => 'us-east-2' ]); $keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; $ciphertextBlob = 'Place your cipher text blob here'; try { $result = $KmsClient->reEncrypt([ 'CiphertextBlob' => $ciphertextBlob, 'DestinationKeyId' => $keyId, ]); var_dump($result); } catch (AwsException $e) { // output error message if fails echo $e->getMessage(); echo "\n"; }