首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么pkzip接受两个密码?

为什么pkzip接受两个密码?
EN

Stack Overflow用户
提问于 2016-11-12 16:43:06
回答 1查看 348关注 0票数 0

当我写一个函数来破解它时,我正在尝试做这个作业-- https://www.root-me.org/en/Challenges/Cryptanalysis/File-PKZIP

代码语言:javascript
复制
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

代码语言:javascript
复制
unzip -P scooter /home/begood/Downloads/ch5.zip replace readme.txt?           [y]es, [n]o, [A]ll, [N]one, [r]ename:

但当我用它解压缩时,它说:

代码语言:javascript
复制
inflating: /home/begood/readme.txt  
  error:  invalid compressed data to inflate

真正的密码是:14535。为什么pkzip接受两个密码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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个随机密码中就有一个将通过该第一次检查,然后继续尝试解压缩错误解密的压缩数据,直到出现错误。

因此,将被“接受”的密码远远不止两个。然而,它不会花费很多字节的解压缩数据来检测密码是否不正确。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40565155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档