我正在尝试打印解密的数据和加密的数据,以验证它是正确的。
session = botocore.session.get_session()
client = session.create_client('kms',region_name = 'us-east-1',aws_access_key_id = '[YOUR ACCESS KEY]',aws_secret_access_key = '[YOUR SECRET ACCESS KEY]')
key_id = '[KEY ID]'
plaintext='[FILEPATH\FILENAME.CSV]'
ciphertext = client.encrypt(KeyId=key_id, Plaintext=plaintext)
ciphertextblob = ciphertext
decrypt_ciphertext = client.decrypt(CiphertextBlob = ciphertextblob)
print('Ciphertext: ' ciphertext)
print('Decrypted Ciphertext: 'decrypt_ciphertext)当我运行这段代码时,数据被成功加密,然而,当它试图解密数据时,它给出了一个参数验证失败的错误。有没有人知道为什么会出现这个错误或者如何修复它?
发布于 2018-06-16 02:23:03
来自boto3/botocore的参数验证错误来自构造请求的预处理器。因此,这将在任何内容被发送到实际的服务API之前触发。
在本例中,如果您完全按照问题中的方式运行代码,则将整个encrypt响应作为CiphertextBlob参数传递,这将引发参数验证错误,因为它需要的是一个字节字符串,但收到的却是一个字典。您需要从响应中提取密文,然后发送该密文。
ie:将ciphertextblob = ciphertext更改为ciphertextblob = ciphertext['CiphertextBlob']
也就是说,从您示例的内容来看,您似乎正在尝试加密一个文件?KMS服务通过encrypt/decrypt API最多只能处理4096个字节的数据。如果需要加密大量数据,则需要使用某种形式的信封加密。我会推荐亚马逊网络服务加密SDK1。它被专门设计为尽可能简单,以便安全地使用,并具有与AWS KMS的内置集成。
https://stackoverflow.com/questions/50865688
复制相似问题