暴力破解加密压缩文件

  • 实验目的

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

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

Python3.8

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

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

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

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

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

暴力破解加密压缩文件_第1张图片

任务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正则式进行匹配,需要该密码同时包含小写,大写以及数字。

暴力破解加密压缩文件_第2张图片

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

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

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

测试如图:

暴力破解加密压缩文件_第3张图片

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

程序及运行结果

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

# -*- 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
            

            

            

你可能感兴趣的:(python)