Python Pycrypto AES加密引发两个错误

Python Pycrypto AES加密引发两个错误,python,encryption,cryptography,aes,pycrypto,Python,Encryption,Cryptography,Aes,Pycrypto,我创建了一个小脚本来加密和解密一个文件,但是该文件是零字节的,并且没有创建解密的文件 代码: 从hashlib导入md5 从加密导入随机 从Crypto.Cipher导入AES 导入操作系统 从加密导入* def加密(in_文件、out_文件、密钥、iv): bs=AES.块大小 密码=AES.new(密钥,AES.MODE_CBC,iv) 完成=错误 未完成时: chunk=in_file.read(1024*bs) 如果len(块)==0或len(块)%bs!=0: 填充长度=bs-(长度(

我创建了一个小脚本来加密和解密一个文件,但是该文件是零字节的,并且没有创建解密的文件

代码:

从hashlib导入md5
从加密导入随机
从Crypto.Cipher导入AES
导入操作系统
从加密导入*
def加密(in_文件、out_文件、密钥、iv):
bs=AES.块大小
密码=AES.new(密钥,AES.MODE_CBC,iv)
完成=错误
未完成时:
chunk=in_file.read(1024*bs)
如果len(块)==0或len(块)%bs!=0:
填充长度=bs-(长度(块)%bs)
chunk+=字节(填充长度)*chr(填充长度)
完成=正确
out_file.write(密码、加密(区块))
def解密(in_文件、out_文件、密钥、iv):
bs=AES.块大小
密码=AES.new(密钥,AES.MODE_CBC,iv)
下一个区块=“”
完成=错误
未完成时:
chunk,next\u chunk=next\u chunk,cipher.decrypt(在\u file.read(1024*bs)中)
如果len(下一个_块)==0:
填充长度=ord(块[-1])
如果padding_length<1或padding_length>bs:
raise VALUERROR(“错误的解密填充(%d)”%padding\u长度)
如果数据块[-填充长度:!=(padding_length*chr(padding_length)):
raise VALUERROR(“错误解密”)
chunk=chunk[:-填充长度]
完成=正确
out_file.write(块)
in_file=open('C:/Users/saeed/Desktop/ImportantFolder/marry.jpg','rb')
out\u file=open('C:/Users/saeed/Desktop/ImportantFolder/marry\u enc.jpg','wb')
key=os.uradom(32)
iv=os.Uradom(16)
加密(in_文件、out_文件、密钥、iv)
in_file.close()中
out_file.close()
打印('加密!')
in_file=open('C:/Users/saeed/Desktop/ImportantFolder/marry_enc.jpg','rb')
out\u file=open('C:/Users/saeed/Desktop/ImportantFolder/marry\u dec.jpg','wb')
解密(in_文件、out_文件、密钥、iv)
in_file.close()中
out_file.close()
打印('已解密!')
已加密的文件_enc已创建,但为零字节,并且在代码停止时无法解密。它会在加密过程中卡住,永远不会打印加密的文件!。错误:

Traceback (most recent call last):
  File "C:/Users/saeed/IdeaProjects/encryptor/encryption.py", line 41, in <module>

encrypt(in_file, out_file, key, iv)

File "C:/Users/saeed/IdeaProjects/encryptor/encryption.py", line 15, in 
encrypt

chunk += padding_length * chr(padding_length)
TypeError: can't concat bytes to str
回溯(最近一次呼叫最后一次):
文件“C:/Users/saeed/IdeaProjects/encryptor/encryption.py”,第41行,在
加密(in_文件、out_文件、密钥、iv)
文件“C:/Users/saeed/IdeaProjects/encryptor/encryption.py”,第15行,在
加密
chunk+=填充长度*chr(填充长度)
TypeError:无法将字节连接到str

这意味着什么?如何修复它?

从文件读取时,读取数据的类型是
字节类型,而不是
str
类型。如果改为使用
chunk+=bytes(padding\u length)
填充将附加到块中。

使用此选项时,我得到:chunk+=bytes(padding\u length)*chr(padding_length)TypeError:无法将序列与类型为'str'的非int相乘,该类型可能应该是
chunk+=字节([padding_length])*padding_length
我不确定需要什么padding字符
bytes(padding_length)
将生成一系列长度为空的字符
padding_length
。这将真正帮助您获得一个Python IDE,您可以在其中逐步检查代码的执行情况。您应该添加您正在使用的Python版本,这在这里很重要。可能是python3,其中不能混合字节和字符串。
bytestr[idx]
直接将值作为int(不要使用
ord()
),而不是
chr(byteval)
可以使用
字节([byteval])
Traceback (most recent call last):
  File "C:/Users/saeed/IdeaProjects/encryptor/encryption.py", line 41, in <module>

encrypt(in_file, out_file, key, iv)

File "C:/Users/saeed/IdeaProjects/encryptor/encryption.py", line 15, in 
encrypt

chunk += padding_length * chr(padding_length)
TypeError: can't concat bytes to str