我现在正在使用python module-struct为我的学校项目制作一个类似勒索的程序,并且存在struct.error:解包需要8个字节的缓冲区。我不知道为什么会这样。因为我正在Github中修复代码-它无法在我的计算机中工作-了解其工作原理。而且它不起作用。最初,glob函数存在问题,我已将其修复,但我从未接触过此部分。
我不习惯使用struct模块,也不知道如何使用该功能。所以我试图只放入整数并删除'infile.read(struct.calcsize('Q'))或在calcsize的Q前面插入'<'或只放入struct.calcsize('Q')。我也阅读了文档,试图理解如何使用它并解决问题,但令我感到羞耻的是,我失败了。
def decrypt_file(key, in_filename, out_filename = None, chnksize = 64*1024):
if not out_filename:
out_filename = os.path.splitext(in_filename)[0]
with open(in_filename, 'rb') as infile:
origsize = struct.unpack('<Q', infile.read(struct.calcsize('Q')))[0]
iv = infile.read(16)
decryptor = AES.new(key, AES.MODE_CBC, iv)
#chunksize = 16
with open(out_filename, 'wb') as outfile:
while True:
chunk = infile.read(chunksize)
if len(chunk) == 0:
break
outfile.write(decryptor.decrypt(chunk))
outfile.truncate(origsize)
它希望对编码的文件进行解码,首先,它必须计算其原始大小,但只会吐出错误消息-struct.error:解压缩需要8个字节的缓冲区。
这是原始错误消息:
C:\Users\Yeeun\Desktop\for Test\jmtree_44520.jpg .sasya
Decrypting> C:\Users\Yeeun\Desktop\for Test\jmtree_44520.jpg.sasya
Traceback (most recent call last):
File "C:\Users\Yeeun\Desktop\test\RansomTest.py", line 62, in <module>
decrypt_file(key, filename)
File "C:\Users\Yeeun\Desktop\test\RansomTest.py", line 32, in decrypt_file
origsize = struct.unpack('<Q', infile.read(struct.calcsize('Q')))[0]
struct.error: unpack requires a buffer of 8 bytes