Python 3.x 获取异常:对象类型<;类别';str'&燃气轮机;无法传递给C代码

Python 3.x 获取异常:对象类型<;类别';str'&燃气轮机;无法传递给C代码,python-3.x,pycryptodome,Python 3.x,Pycryptodome,我在Python3.7.2上安装了pip install pycryptodome。我得到了上面的异常,用于obj=AES.new(key,AES.MODE\u CBC,iv)行。我的代码是: from Crypto import Random from Crypto.Cipher import AES import random def get_encryption(): try: str = "This is input string" key =

我在Python3.7.2上安装了pip install pycryptodome。我得到了上面的异常,用于obj=AES.new(key,AES.MODE\u CBC,iv)行。我的代码是:

from Crypto import Random
from Crypto.Cipher import AES
import random

def get_encryption():
    try:
        str = "This is input string"

        key = b'abcdefghijklmnop'  
        iv = Random.new().read(AES.block_size)

        obj = AES.new(key, AES.MODE_CBC, iv)
        encrypted = obj.encrypt(str)
        print(encrypted)
    except Exception as e:
        print(e)

我一路尝试,但没有找到解决办法。

一路尝试后,我找到了解决办法。我将密钥字符串转换为字节。 代码是:


//第一个pip安装pycryptodome——(pycrypto已过时,并出现问题) //pip安装pkcs7

from Crypto import Random
from Crypto.Cipher import AES
import base64
from pkcs7 import PKCS7Encoder
from app_settings.views import retrieve_settings # my custom settings

app_secrets = retrieve_settings(file_name='secrets');


def encrypt_data(text_data):
                    #limit to 32 bytes because my encryption key was too long
                    #yours could just be 'abcdefghwhatever' 
    encryption_key = app_secrets['ENCRYPTION_KEY'][:32]; 

    #convert to bytes. same as bytes(encryption_key, 'utf-8')
    encryption_key = str.encode(encryption_key); 
    
    #pad
    encoder = PKCS7Encoder();
    raw = encoder.encode(text_data) # Padding
    iv = Random.new().read(AES.block_size )

                                 # no need to set segment_size=BLAH
    cipher = AES.new( encryption_key, AES.MODE_CBC, iv ) 
    encrypted_text = base64.b64encode( iv + cipher.encrypt( str.encode(raw) ) ) 
    return encrypted_text;

在尝试代码时,我得到的
数据必须在CBC模式下填充到16字节边界
from Crypto import Random
from Crypto.Cipher import AES
import base64
from pkcs7 import PKCS7Encoder
from app_settings.views import retrieve_settings # my custom settings

app_secrets = retrieve_settings(file_name='secrets');


def encrypt_data(text_data):
                    #limit to 32 bytes because my encryption key was too long
                    #yours could just be 'abcdefghwhatever' 
    encryption_key = app_secrets['ENCRYPTION_KEY'][:32]; 

    #convert to bytes. same as bytes(encryption_key, 'utf-8')
    encryption_key = str.encode(encryption_key); 
    
    #pad
    encoder = PKCS7Encoder();
    raw = encoder.encode(text_data) # Padding
    iv = Random.new().read(AES.block_size )

                                 # no need to set segment_size=BLAH
    cipher = AES.new( encryption_key, AES.MODE_CBC, iv ) 
    encrypted_text = base64.b64encode( iv + cipher.encrypt( str.encode(raw) ) ) 
    return encrypted_text;