首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >暴力破解加密压缩文件

暴力破解加密压缩文件

作者头像
全栈程序员站长
发布2022-09-05 14:52:59
发布2022-09-05 14:52:59
1.5K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

  • 实验目的

应用Python程序设计语言的相关知识,对加密的压缩文件进行破解。

  • 实验所用仪器(或实验环境)

Python3.8

  • 实验基本原理及步骤(或方案设计及理论计算)

任务1:定义一个函数,函数带有一个参数L(类型为整数),函数返回一个长度为L、包含大小写字母和数字的随机密码(类型为字符串)。

在任务1中,可以借助random中的choice,以及string库中的ascii_letters;至少用3个不同的长度测试函数的返回值。

ascii_letters基本上是ascii_lowercase和ascii_uppercase字符串常量的串联。如图:

为了使密码中也包含数字,在使用string.digits。如图:

任务2:定义一个函数,函数带有一个参数(类型为字符串,表示一个密码),函数判断密码是否符合要求:8 位以上,包含英文大小写字母、数字。如果符合要求,返回True;否则返回False。

在任务2中,如果想尝试更简洁的代码,可以考虑使用re模块;测试用例可以参考以下8组:

测试用例 输入 输出

示例1 13t11jtk False

示例2 12345678901 False

示例3 3aA245362 True

示例4 123t2lASDJ True

示例5 password False

示例6 Avbw23r9gfs True

示例7 23523523613 False

示例8 AJFQWEFQWFK False

在这里使用re正则式进行匹配,需要该密码同时包含小写,大写以及数字。

任务 3:定义一个函数,函数带有两个参数,一个是要解压的文件路径,一个是解压密码。如果解压成功则返回True;否则返回False。

在任务3中,打开压缩文件可以借助模块zipfile中的ZipFile。

首先生成一个test3.txt文件,再在终端对其进行压缩和加密。

测试如图:

  • 实验数据记录(或仿真及软件设计)

程序及运行结果:

最后将所有模块连接的时候存在问题,该代码还不完善

代码语言:javascript
代码运行次数:0
运行
复制
# -*- coding: utf-8 -*-
"""
Created on Sun May 10 16:33:48 2020

@author: natur
"""

import string
import random
import re
import zipfile

def rand_pass(L): #int
    generate_pass = ''.join([random.choice(string.ascii_letters + string.digits)
                             for i in range(L)])
    return generate_pass

def check_pass(password):  #string
    if len(password) < 2:
        return False
    else:
        lowerRe = re.compile('[a-z]')
        upperRe = re.compile('[A-Z]')
        digitRe = re.compile('[0-9]')
        #wrongRe = re.compile("[^a-zA-Z0-9]")  #not match
        #elif true_pass.search(password) != None:  #无效字符
            #return False
        if(lowerRe.search(password) != None and upperRe.search(password) != None
           and digitRe.search(password) != None):
            return True
        else:
            return False
        
def ZipPwd(zip_file,password):
    if zipfile.is_zipfile(zip_file) != True:
        return print("非有效的zipfile")
    else:
        with zipfile.ZipFile(zip_file,"r") as zFile:#read zipfile
            try:
                zFile.extractall(pwd = str.encode(password))  #1.运行了一个半小时还没结果
                #zFile.extractall(pwd = password)  #2.可以很快解压成功,但口令不对
                print("zip文件解压成功,密码为:%s"%(password))
                return True
            except:
                print("zip文件解压失败,密码为:%s"%(password))
                return False
     
#解密一个不知道密钥的压缩文件    
      
if __name__ == '__main__':
    zip_file = input("请输入文件路径:")
    L = int(input("请输入猜测的密码的长度:"))
    while True:
        password0 = rand_pass(L)
        if check_pass(password0) == True:
            password = password0
            if ZipPwd(zip_file,password) == True:
                break

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/136779.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年6月3,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档