当我写一个函数来破解它时,我正在尝试做这个作业-- https://www.root-me.org/en/Challenges/Cryptanalysis/File-PKZIP。
import subprocess from time import sleep
file = open('/home/begood/Downloads/SecLists-master/Passwords/'
'rockyou-75.txt', 'r') lines = file.readlines() file.close() for line in lines:
command = 'unzip -P ' + line.strip() + ' /home/begood/Downloads/ch5.zip'
print command
p = subprocess.Popen(
command,
stdout=subprocess.PIPE, shell=True).communicate()[0]
if 'replace' in p:
print 'y\n'
sleep(1)它停在密码= scooter
unzip -P scooter /home/begood/Downloads/ch5.zip replace readme.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename:但当我用它解压缩时,它说:
inflating: /home/begood/readme.txt
error: invalid compressed data to inflate真正的密码是:14535。为什么pkzip接受两个密码?
发布于 2016-11-13 14:12:28
我认为所使用的加密是旧的、非常弱的加密,是原始PKZIP格式的一部分。
该加密方法在压缩数据之前有一个12字节的salt头.来自PKWare规范:
在头被解密后,缓冲区中的最后一个或两个字节应该是解密文件的CRC的高阶字/字节,存储在Intel低字节/高字节顺序中。2.0之前的PKZIP版本使用2字节CRC检查;2.0之后的版本使用1字节CRC检查。这可用于测试所提供的密码是否正确。
它最初是1.0规范中的两个字节,但在2.0规范中,以及在相关版本的PKZIP中,检查值被更改为一个字节,以便像您正在做的事情那样进行密码搜索。结果是,大约每256个随机密码中就有一个将通过该第一次检查,然后继续尝试解压缩错误解密的压缩数据,直到出现错误。
因此,将被“接受”的密码远远不止两个。然而,它不会花费很多字节的解压缩数据来检测密码是否不正确。
https://stackoverflow.com/questions/40565155
复制相似问题