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

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

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

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

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

以下示例演示如何:

  • 使用 Encrypt 加密数据密钥。

  • 使用 Decrypt 解密数据密钥。

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

所有示例代码示例AmazonSDK for PHP 版本 3(位于 GitHub 上).

Credentials

运行示例代码之前,请配置Amazon凭证,如的凭证AmazonSDK for PHP 版本 3. 然后导入Amazon适 SDK for PHP 软件开发工具包,如的基本使用模式AmazonSDK for PHP 版本 3.

有关使用的更多信息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"; }

Reencrypt

要解密已加密数据密钥,然后立即在其他 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"; }