鱼C论坛

 找回密码
 立即注册
查看: 3376|回复: 11

[技术交流] python小练习(009):又是调皮的侄子

[复制链接]
发表于 2016-11-17 21:46:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
前2个小练习大家学习了字典树的基本原理及应用。python小练习(008):传送门

今天我淘气的侄子又把我的文件用zip压缩了,并用了3个小写字母组成的单词进行了加密,你能帮我破解这个zip文件吗?

readme.zip (195 Bytes, 下载次数: 42)

提示:

python自带的zipfile库:
ZipFile.extract(member, path=None, pwd=None)
Extract a member from the archive to the current working directory; member must be its full name or a ZipInfo object). Its file information is extracted as accurately as possible. path specifies a different directory to extract to. member can be a filename or a ZipInfo object. pwd is the password used for encrypted files.

Returns the normalized path created (a directory or new file).

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
changhaitian + 1 + 1 + 1

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-17 22:29:04 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-17 23:04:55 | 显示全部楼层
新人进来练练手啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-17 23:55:18 | 显示全部楼层
你真厉害!
以前没用过这个模块。开始怎么也不行,后来查到pwd需要bytes,而不能是普通的字符串。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-18 07:01:44 | 显示全部楼层
冬雪雪冬 发表于 2016-11-17 23:55
你真厉害!
以前没用过这个模块。开始怎么也不行,后来查到pwd需要bytes,而不能是普通的字符串。

你真厉害!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-18 14:02:44 | 显示全部楼层
解答:
  1. import zipfile
  2. with zipfile.ZipFile('readme.zip','r') as myzip:
  3.         for i1 in range(97,123):
  4.                 for i2 in range(97,123):
  5.                         for i3 in range(97,123):
  6.                                 pwd = bytes(chr(i1)+chr(i2)+chr(i3), encoding = "utf8") #正如版主所说password必须是以byte形式,所以需要转化。
  7.                                 #pwd = eval("b\'"+chr(i1)+chr(i2)+chr(i3)+"\'") #2种转化方式都可以,推荐前一种。
  8.                                 try:
  9.                                         returns = myzip.extract('readme.txt' ,path='D:\\' ,pwd=pwd)
  10.                                         print (pwd)
  11.                                         input ()
  12.                                         exit()
  13.                                 except:
  14.                                         continue
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-22 23:22:44 | 显示全部楼层
牛逼  继续学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-22 10:16:05 | 显示全部楼层
学习一下。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-16 18:24:11 | 显示全部楼层
厉害哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-5 22:24:53 | 显示全部楼层
答案的程序破解出了自己不会停,我改了一下:
import zipfile
class 跳出循环(Exception):
    pass
with zipfile.ZipFile('readme.zip','r') as myzip:
    for i1 in range(97,123):
        for i2 in range(97,123):
            for i3 in range(97,123):
                pwd = bytes(chr(i1)+chr(i2)+chr(i3), encoding = "utf8") #正如版主所说password必须是以byte形式,所以需要转化。
                try:
                    myzip.extract('readme.txt',pwd=pwd)
                    print (pwd)
                    raise 跳出循环()
                    input ()
                    exit()
                except Exception as e:
                    continue
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-10 22:36:38 | 显示全部楼层
  1. from zipfile import ZipFile as ZF

  2. data = ZF(r'F:\Python\Py3.6\readme.zip', 'r')
  3. for i in range(97, 97+27):
  4.     for j in range(97, 97+27):
  5.         for k in range(97, 97+27):
  6.             pwd = chr(i) + chr(j) + chr(k)
  7.             pwd = bytes(pwd, encoding='utf-8')
  8.             try:
  9.                 filedata = data.extract('readme.txt', pwd=pwd)
  10.                 print(filedata)
  11.                 print(pwd)
  12.                 break
  13.             except:
  14.                 pass
复制代码


为何直接解压出的readme.txt是空白的?
打印出密码后,手动用密码解压,才看到了“你真厉害。。”,还是题主厉害。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-10 22:57:42 | 显示全部楼层
阿bang 发表于 2018-4-10 22:36
为何直接解压出的readme.txt是空白的?
打印出密码后,手动用密码解压,才看到了“你真厉害。。”,还 ...

查了一圈,没找到原因
最后终于发现了,文件忘了关了。。。。。
不用with open,不随手关文件的后果。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 05:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表