python破解密码

如下,ls让我们用python破解zip文件的密码。其中的key是我得出来的穷举密码的列表,python.zip是要解压缩的文件。我想问的是,如何判断文件是否解压成功,从而停止并且显示密码。破解可以成功,但是文件名是乱码,并且一个文件为空,也无法显示密码。(忽略我key的得出过程,比较低级)

img

import zipfile
import itertools
key = []
result_1 = []
result_2 = []
password1 = [chr(e1) for e1 in range(48,58)]
password2 = [chr(e2) for e2 in range(97,123)]
for r1 in range(0,len(password1)-2):
    result1 = password1[0+r1]+password1[1+r1]+password1[2+r1]
    result_1.append(result1)
for r2 in range(0,len(password2)-2):
    result2 = password2[0 + r2] + password2[1 + r2] + password2[2 + r2]
    result_2.append(result2)
ret = [''.join(item) for item in itertools.product('0123456789',repeat=6)]
for d1 in result_1:
    for d2 in result_2:
        re1 = d1+d2
        re2 = d2+d1
        key.append(re1 and re2)
key += ret

f = zipfile.ZipFile('python.zip')
for password in key:
        f.extractall(pwd=password.encode(encoding='utf-8'))
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客: python 字典列表以另一个字典列表的key进行排序中的 两个字典列表 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    有两个字典列表

    list1 = [{"terminal_code": '1', "terminal_id": "00001"},
     		{"terminal_code": '3', "terminal_id": "00003"}, 
     		{"terminal_code": '2', "terminal_id": "00002"}]
    list2 = [{"terminal_id": "00003", "terminal_name": "终端3"}, 
    		{"terminal_id": "00002", "terminal_name": "终端2"},
     		{"terminal_id": "00001", "terminal_name": "终端1"}]
    

    现在希望将list2根据list1中terminal_id的顺序进行排序,期望值如下:

    list2 = [{"terminal_id": "00001", "terminal_name": "终端1"}, 
    		{"terminal_id": "00003", "terminal_name": "终端3"},
    		{"terminal_id": "00002", "terminal_name": "终端2"}]
    

    实现代码如下:

    c = [i['terminal_id'] for i in list1]
    def a(elem):
        return c.index(elem['terminal_id'])
    list2.sort(key=a)
    print(list2)
    # [{"terminal_id": "00001", "terminal_name": "终端1"}, 
    # {"terminal_id": "00003", "terminal_name": "终端3"},
    # {"terminal_id": "00002", "terminal_name": "终端2"}]
    

    一句代码实现

    list2.sort(key=lambda x: [i['terminal_id'] for i in list1].index(x['terminal_id']))
    
  • 以下回答来自chatgpt:

    对于判断是否成功解压文件,可以在解压后获取zip文件中的文件列表,并检查文件列表的长度是否与预期相同。对于显示解压密码,可以在try语句块内加入一条print语句来显示尝试的密码。修改后的代码如下:

    import zipfile
    
    key = ["password1","password2","password3"]
    zip_file = zipfile.ZipFile('python.zip')
    
    for password in key:
        try:
            zip_file.extractall(pwd=bytes(password,'utf-8'))
            print("Password found: ", password)
            file_list = zip_file.namelist()
            if len(file_list) == 2: # 假设压缩包中有两个文件
                print("File extracted successfully.")
            else:
                print("Something went wrong while extracting file.")
            break
        except Exception as e:
            print("Trying password: ", password)
            print("Error:", e)
    

    需要注意的是,虽然压缩包中只有一个文件,但解压后可能会伴随着其他文件或文件夹的生成,因此对文件列表长度的判断需要谨慎。另外,如果出现异常需要打印异常信息以便于排查问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^