引:
最近做自定义TCP数据包通信,使用加解密库crypto,遇到的小问题排坑如下:
写在前面:
若要是使用crypto库,linux下需要按照如下包名安装
pip install pycryptodome
一、对称AES
1、Python aes加密IV is not meaningful for the ECB mode。。。
(加不加IV)EBC不加Ⅳ, CBC模式加Ⅳ,所以EBC模式不给第三个参数,CBC模式可以加第三个参数
2、Object type class 'str' cannot be passed to C code。。。
key ,vi,传入endtryde的data,三个数据都要变为bytes, (encode)
KEY VI 传入的data,均要为bytes,实践中注意KEY也需要encode
附: # 对称加密AES 加密
def aes_encrypt(data: str, key: bytes): cryptor = AES.new(key.encode('utf-8'), AES.MODE_ECB) # mode = AES.MODE_CBC # cryptor = AES.new(key.encode('utf-8'), mode, b'0000000000000000') ciphertext = str(base64.b64encode(cryptor.encrypt(add_to_16(data))), encoding='utf-8').replace(' ', '').encode('utf-8') return ciphertext
# 对称加密AES 解密:
# 对称加密AES 解密 def aes_decrypt(data: bytes, key: bytes) -> str: cryptor = AES.new(key.encode('utf-8'), AES.MODE_ECB) plain_text = cryptor.decrypt(base64.b64decode(data)) return plain_text.decode('utf-8').rstrip('