2015-02-09 113 views
0

首先让我说我是一个漂亮的noob程序员,但我仍然不是那种决定想要制作MMO游戏的人。我的问题涉及到zip文件。我一直在研究,我找不到如何使用zipfile模块。我的想法是,你会放在邮编的路径,出来的密码。使用python zipfile查找zip密码

这是我发现,我想我的代码使用

ZipFile.open(name, mode='r', pwd=None) 

的命令,但问题是我不知道我在做什么。

+1

你在做什么?你的描述没有意义,你可以重述吗? – 2015-02-09 05:46:22

+0

当然,我认为我的描述过于复杂,但基本上我想要一个带有密码的zip文件,然后我可以运行我的程序并找到密码。 谢谢 – Harry 2015-02-09 05:49:52

回答

1

你有办法做到这一点,它是蛮力。

所以你需要一个蛮力算法(你自己喜欢或设计的)和/或一个为你的脚本提供密码的彩虹表。之后,您只需循环遍历它,直到找到密码。

https://docs.python.org/2/tutorial/errors.html#handling-exceptions

这被简化的非优化的代码

rainbowTable = ['Password', '123abc', 'qwerty', 'qwerty123'] # etc... 
x = 0 
data = '' 
for x in xrange(len(rainbowTable)): 
    try: 
     data = ZipFile.open(name, mode='r', pwd=rainbowTable[x]) 
    if data != '' 
     break 

正如指出的那样,在溶液上方是unpythonic(但伊莫更容易把握如果你来自另一种语言)。这是应该如何写的。

for password in rainbowTable: 
    try: 
     data = ZipFile.open(name, mode='r', pwd=password) 
    if data != '' 
     break 
    else: 
     print password 

但Python并不是最好的选择。你可能想用C来完成这个特定的任务。

下面是一个Python例子的现实世界的例子: https://github.com/igniteflow/violent-python/blob/master/pwd-crackers/zip-crack.py

从样本:

try: 
    zip_file.extractall(pwd=password) 
    password = 'Password found: %s' % password 
except: 
    pass 
print password 

的代码总量为17行,所以我建议你阅读它更好的理解。

+0

实际上,“为x在xrange(len(rainbowTable))”是非常unpythonic :)更好地直接遍历列表像“为passwd in rainbowTable” – artemdevel 2015-02-09 09:02:56

+0

我知道它unpythonic,但作为一个简单的例子,它在最少显示变量来自哪里。有了这个说法,我仍然相信你的解决方案在风格上是优越的,而且速度也可能很快。 – 25r43q 2015-02-09 12:15:41

+0

我明白我将如何尝试找到密码,但我不知道如何使用zip文件模块来检查密码是否正确 谢谢 – Harry 2015-02-09 21:02:02