python暴力破解zip加密文件

本文介绍了如何利用Python的zipfile模块和itertools.permutations进行暴力破解zip加密文件的方法。首先,通过准备加密的zip文件,然后使用zipfile尝试各种字符组合作为密码,通过全排列生成可能的密码。代码示例中展示了如何创建解压函数,并针对4位字母数字密码进行尝试,如果不知道具体密码长度,可以增加循环来尝试不同长度的密码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

前言:

一、破解zip加密文件的思路:

1、准备一个加密的zip文件。

2、zipfile模块可以解压zip文件。

3、itertools.permutations实现全字符的全排列。

二、实操代码:

1、实现解压zip文件:

2、实现字符的全排列:

 三、几位密码不知道也可以破解:


前言:

        日常工作中,会遇到一些加密的zip文件,但是因为某些原因或者时间过长,密码不知道了。

但是zip文件中文件有很重要很必须。那么,我们试一试万能的Python,暴力破解密码。

一、破解zip加密文件的思路:

1、准备一个加密的zip文件。

2、zipfile模块可以解压zip文件。

解压时可以提供密码zfile.extractall("./", pwd=password.encode("utf8"))

3、itertools.permutations实现全字符的全排列。

通过函数itertools.permutations("abc", 3)实现全字符的全排列:abc/acb/bca/bac/cab/cba

二、实操代码:

1、实现解压zip文件:

import zipfile
import itertools

filename = "readme.zip"

# 创建一个解压的函数,入参为文件名和密码
# 并使用try-except,避免报错中断程序。
def uncompress(file_name, pass_word):
    try:
        with zipfile.ZipFile(file_name) as z_file:
            z_file.extractall("./", pwd=pass_word.encode("utf-8"))
        return True
    except:
        return False

2、实现字符的全排列:

import zipfile
import itertools

filename = "readme.zip"
# 创建一个解压的函数,入参为文件名和密码
# 并使用try-except,避免报错中断程序。
def uncompress(file_name, pass_word):
    try:
        with zipfile.ZipFile(file_name) as z_file:
            z_file.extractall("./", pwd=pass_word.encode("utf-8"))
        return True
    except:
        return False

# chars是密码可能的字符集
chars = "abcdefghijklmnopqrstuvwxyz0123456789"
for c in itertools.permutations(chars, 4):
    password = ''.join(c)
    print(password)
    result = uncompress(filename, password)
    if not result:
        print('解压失败。', password)
    else:
        print('解压成功。', password)
        break

本文介绍的zip文件大概知道密码是4位的,字符大概是a-z1-0。并且不存在重复字符的,不会有“aabb”的密码。

zip加压时是选择了zip传统加密!

 三、几位密码不知道也可以破解:

我查了一些资料,zip加密密码最多是12位,那么程序可以修改这样:

import zipfile
import itertools

filename = "readme.zip"


def uncompress(file_name, pass_word):
    try:
        with zipfile.ZipFile(file_name) as z_file:
            z_file.extractall("./", pwd=pass_word.encode("utf-8"))
        return True
    except:
        return False

chars = "abcdefghijklmnopqrstuvwxyz0123456789"
for i in range(12):
    for c in itertools.permutations(chars, i):
        password = ''.join(c)
        print(password)
        result = uncompress(filename, password)
        if not result:
            print('解压失败。', password)
        else:
            print('解压成功。', password)
            break

增加上一个for循环。

Python中安全地操作加密ZIP文件通常需要使用`zipfile`库,并结合`pycryptodome`或其他加密库来处理加密部分。以下是一个简单的例子,展示如何使用`zipfile`配合`pycryptodome`来读取和写入加密ZIP文件: ```python from zipfile import ZipFile from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpad # 使用AES加密和解密 def encrypt_data(data, key): cipher = AES.new(key.encode(), AES.MODE_CBC) ct_bytes = cipher.encrypt(pad(data.encode(), AES.block_size)) iv = cipher.iv return iv + cipher.finalize() def decrypt_data(encrypted_data, key): iv = encrypted_data[:16] cipher = AES.new(key.encode(), AES.MODE_CBC, iv=iv) pt = unpad(cipher.decrypt(encrypted_data[16:]), AES.block_size) return pt.decode() # 假设key变量存储着加密密钥 key = b'some_random_key' # 需要替换为实际的密钥 # 打开加密ZIP文件 with ZipFile('encrypted.zip', 'r') as zip_file: for filename in zip_file.namelist(): if filename.endswith('.txt'): # 只处理特定类型的文件 with zip_file.open(filename, 'r') as file: original_data = file.read() encrypted_data = encrypt_data(original_data, key) # 在这里你可以将加密后的数据写入新的文件或直接存储到内存 # 新文件名可以是:filename + '_encrypted.txt' new_filename = filename + '_encrypted.txt' zip_file.writestr(new_filename, encrypted_data) # 如果你想打开并读取加密内容,可以这样做: with ZipFile('encrypted.zip', 'a') as zip_file: for filename in ['_encrypted.txt']: encrypted_data = zip_file.read(filename) decrypted_data = decrypt_data(encrypted_data, key) # 这里假设decrypted_data是要写回原文件 with zip_file.open(filename[:-len('_encrypted.txt')], 'w') as file: file.write(decrypted_data) ``` 请注意,这只是一个基础示例,实际应用中你需要妥善管理密钥,并确保安全性,比如使用安全的密钥存储方案。此外,暴力破解密码是非法的,请勿将其用于非法目的。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值