使用第 AWS SDK for PHP 3 版加密和解密AWS KMS資料金鑰 - AWS SDK for PHP

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用第 AWS SDK for PHP 3 版加密和解密AWS KMS資料金鑰

資料金鑰是加密金鑰,您可以用來加密資料,包括大量資料和其他資料加密金鑰。

您可以使用 AWS Key Management Service's (AWS KMS) AWS KMS key來產生、加密和解密資料金鑰。

下列範例示範如何:

  • 使用 Encrypt 加密資料金鑰。

  • 使用 Decrypt 解密資料金鑰。

  • 使用新的 KMS 金鑰重新加密資料金鑰ReEncrypt

所有的範例程式碼都可以AWS SDK for PHP在這裡取得 GitHub。

登入資料

在執行範例程式碼之前,請依照中的說明設定您的AWS認證憑證。然後匯入AWS SDK for PHP,如中所述基本使用

如需使用 AWS Key Management Service (AWS KMS) 的詳細資訊,請參閱AWS KMS開發人員指南

加密

Encrypt 操作旨在加密資料金鑰,但並不常用。GenerateDataKey和作GenerateDataKeyWithoutPlaintext業會傳回加密的資料金鑰。Encypt當您將加密的資料移至新區域,並想要使用新AWS區域中的 KMS 金鑰來加密其資料金鑰時,可以使用此方法。

匯入

require 'vendor/autoload.php'; 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 操作。

您指定的必須是GenerateDataKeyGenerateDataKeyWithoutPlaintext或「加密」回應中CiphertextBlob欄位的值。ciphertextBlob

匯入

require 'vendor/autoload.php'; 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"; }

重新加密

若要解密加密的資料金鑰,然後立即在不同 KMS 金鑰下重新加密資料金鑰,請使用此ReEncrypt作業。此操作完全在伺服器端的 AWS KMS 中執行,所以絕不會在 AWS KMS 外部公開您的純文字。

您指定的必須是GenerateDataKeyGenerateDataKeyWithoutPlaintext或「加密」回應中CiphertextBlob欄位的值。ciphertextBlob

匯入

require 'vendor/autoload.php'; 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"; }