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')