python使用AES加密報錯cannot be passed to C code

python使用AES報錯

報錯 TypeError: Object type <class ‘str’> cannot be passed to C code

環境:python3.7.2 、 pycryptodome 3.9.7

報錯代碼先貼上:
在這裏插入圖片描述
報錯在這裏插入圖片描述

其實這個報錯很顯然提醒你,數據類型不能是str,
我們看一波源碼:
找到報錯的部分
在這裏插入圖片描述
我們看到data類型打印出來,以下這個是str類型,所以就報錯了
在這裏插入圖片描述
於是我看了很多篇博客,把代碼中的x轉爲bytes類型就可以了,然後我又運行,繼續報同樣的錯誤
在這裏插入圖片描述
在這裏插入圖片描述

我們可以看到打印出來的data是f8開頭的,這個data其實是我的AES_KEY,問題就出在這裏,然後我繼續把key、iv改成bytes類型,這回沒有報錯了
在這裏插入圖片描述
總結,這種錯誤是因爲數據類型的問題,將AES_KEY、IV還有要加密的數據轉換成bytes類型就可以了
下面附上我的完整代碼

def aes_encrypt(data):
    BLOCK_SIZE = 16
    from base64 import b64encode
    AES_KEY = b'xxx'
    AES_IV = b'xxxx'
    cipher = AES.new(AES_KEY, AES.MODE_CBC, AES_IV)
    x = data + (BLOCK_SIZE - len(data) % BLOCK_SIZE) * chr(BLOCK_SIZE - len(data) % BLOCK_SIZE)
    x = x.encode()
    e = b64encode(cipher.encrypt(x))
    return str(e, encoding='utf8')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章