大家好,又见面了,我是你们的朋友全栈君。
- 实验目的
应用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文件,再在终端对其进行压缩和加密。
测试如图:
- 实验数据记录(或仿真及软件设计)
程序及运行结果:
最后将所有模块连接的时候存在问题,该代码还不完善
# -*- 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
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/136779.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...