我在python的结构模块中使用解压缩,现在出现错误

时间:2019-07-31 14:06:50

标签: python unpack

我现在正在使用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

0 个答案:

没有答案