Python 使用AES Encrypt get raise TypeError(“只能将字节字符串传递给C代码”)

Python 使用AES Encrypt get raise TypeError(“只能将字节字符串传递给C代码”),python,python-3.x,amazon-web-services,encryption,aes,Python,Python 3.x,Amazon Web Services,Encryption,Aes,我尝试用python加密文本,然后执行代码,结果出现错误: 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 e

我尝试用python加密文本,然后执行代码,结果出现错误:

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_ECB)
    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': '701177775058',
        'key_id': 'd67e033d-83ac-4b5e-93d4-aa6cdc3e292e',
    }

    # And your super secret message to envelope encrypt...
    plaintext = PAD('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()
i Get:raise TypeError(“只能将字节字符串传递给C代码”) TypeError:只能将字节字符串传递给C代码 也许谁知道为什么?我怎样才能修好它?请建议

在这里写评论作为回答,我也遇到了同样的问题,这很有帮助

.encode(“utf-8”)
附加到传递给
cypher.encrypt()
函数的任何内容中

cypher.encrypt(PAD(plaintext_message).encode("utf-8"))

注意:这似乎是针对Python3.x的。对于2.x,同样的解决方案可能不起作用。

可能
cypher.encrypt
需要字节对象
cypher.encrypt(PAD(明文信息).encode(“utf-8”))
。没有完整的追踪很难说。天哪!!真的吗?真的,像“编码”这样的小想法很重要吗?谢谢