AWS KMS与AWS Encryption SDK使用不同的加密格式,因此它们无法直接解密彼此的密文。
为了解决这个问题,可以使用AWS Encryption SDK中的aws-encryption-sdk-cli
工具。该工具使用AWS KMS和AWS Encryption SDK可用的加密算法来解密密文。
下面是使用aws-encryption-sdk-cli
工具从AWS Encryption SDK生成的密文中读取并解密数据的示例代码:
import boto3
from aws_encryption_sdk_cli.internal.crypto import aws_encryption_sdk
region = 'us-west-2'
kms_key_alias = 'alias/my-kms-key'
enc_context = {'key1': 'value1', 'key2': 'value2'}
encrypted_data = b'your encrypted data'
client = boto3.client('kms', region_name=region)
kms_key_arn = client.describe_key(KeyId=kms_key_alias)['KeyMetadata']['Arn']
master_key_provider = aws_encryption_sdk.KMSMasterKeyProvider(
key_ids=[kms_key_arn]
)
decrypted_data, header = aws_encryption_sdk.decrypt(
ciphertext=encrypted_data,
encryption_context=enc_context,
key_provider=master_key_provider
)
print(decrypted_data)
以上代码将使用指定的KMS主密钥提供程序解密给定的加密数据。需要将region
和kms_key_alias
参数设置为正确的AWS KMS主密钥别名。需要将enc_context
参数设置为加密时使用的加密上下文。将encrypted_data
参数设置为要解密的数据。
通过这个解决方案,AWS KMS和AWS Encryption SDK的密文可以相互转换,以便在需要时可以使用各自的加密方式进行解密。