AWS 加密类型错误:无法将 str 连接到字节



我尝试编写一个加密数据的代码,然后我尝试执行我的代码,我会遇到错误:

import base64
import boto3
from Crypto.Cipher import AES
PAD = lambda s: s + (32 - len(s) % 32) * ' '

def get_arn(aws_data):
    return 'arn:aws:kms:{region}:{account_number}:key/{key_id}'.format(**aws_data)

def encrypt_data(aws_data, plaintext_message):
    kms_client = boto3.client(
        'kms',
        region_name=aws_data['region'])
    data_key = kms_client.generate_data_key(
        KeyId=aws_data['key_id'],
        KeySpec='AES_256')
    cipher_text_blob = data_key.get('CiphertextBlob')
    plaintext_key = data_key.get('Plaintext')
    # Note, does not use IV or specify mode... for demo purposes only.
    cypher = AES.new(plaintext_key, AES.MODE_EAX)
    encrypted_data = base64.b64encode(cypher.encrypt(PAD(plaintext_message)))
    # Need to preserve both of these data elements
    return encrypted_data, cipher_text_blob

def main():
    # Add your account number / region / KMS Key ID here.
    aws_data = {
        'region': 'eu-west-1',
        'account_number': '70117777xxxx',
        'key_id': 'xxxxxxx-83ac-4b5e-93d4-xxxxxxxx',
    }
    # And your super secret message to envelope encrypt...
    plaintext = b'Hello, World!'
    # Store encrypted_data & cipher_text_blob in your persistent storage. You will need them both later.
    encrypted_data, cipher_text_blob = encrypt_data(aws_data, plaintext)
    print(encrypted_data)

if __name__ == '__main__':
    main()

这是一个错误:

pad = lambda s:s (32 -len(s)%32) *''TypeError:不能将str concat to to to to Bytes也许谁知道问题在哪里?请建议

您的函数PAD旨在与string输入一起使用,并使用bytes输入调用(示例中的b'Hello, World!')。

PAD('Hello, World!')无领先的b)起作用。一种解决方案是将明文粘贴为string,然后将其转换为bytes,例如:

plaintext = PAD('Hello, world!') plaintext_bytes = plaintext.encode('utf-8')

有关如何将string转换为bytes

相关内容

最新更新