不知道大家了解不了解暴力破解?我稍微解释下:

假如有个无聊的人用锁把我的电驴锁了,我并不知道与之匹配的钥匙长什么样,但是我有几乎无数把钥匙可以去试开这把锁。

这样看来,只有我肯浪费时间用一把把钥匙去开锁,那还是有机会打开的。

这种很笨很直接的方法叫做「暴力轮询」,如果用到一些解密的地方就叫做「暴力破解」了。

在暴力轮询中,拥有一本好的密码本是非常重要的。

「今天带大家用30行代码,写一个简单的密码本,如果能拿来破解一些rar、zip里小视频还是非常香的。」

开始

class PasswordBook:small_character = "abcdefghijklmnopqrstuvwxyz"big_character = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"number = "0123456789"special_sign = "~!@#$%^&*()_+|}{[]';,./<>:=-"def __init__(self, min_len, max_len, model):  self.model = modelif min_len < max_len:self.min_len = min_lenself.max_len = max_lenelse:self.min_len = max_lenself.max_len = min_lendef __iter__(self):  return self

五位纯数字的密码,1~100000有100000种可能;

如果数字加上小写字母,则有60466176种可能;

如果把大写字母也带上,916132832种可能,

如果再把特殊字符带上,那就......

如果能在“暴力破解”之前知道密码的位数,哪怕一个区间也是非常有用的。

第一步,把密码的位数的区间设为我们实例化密码本的一个参数:

class PasswordBook:def __init__(self, min_len, max_len):  if min_len < max_len:self.min_len = min_lenself.max_len = max_lenelse:self.min_len = max_lenself.max_len = min_len

第二步,确定要轮询的字符组合,就是确认密码中是否有大小写字母和特殊字符。

在__init__方法中,设定模式:

model = 1 纯数字密码本,

model = 2 数字带字母密码本,

model = 3 数字带字母再带特殊字符密码本。

第四步,把密码本变成一个可迭代对象

class PasswordBook:small_character = "abcdefghijklmnopqrstuvwxyz"big_character = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"number = "0123456789"special_sign = "~!@#$%^&*()_+|}{[]';,./<>:=-"def __init__(self, min_len, max_len, model):  self.model = modelif min_len < max_len:self.min_len = min_lenself.max_len = max_lenelse:self.min_len = max_lenself.max_len = min_lendef __iter__(self):  return self

第五步,再把密码本变成一个迭代器,这样每次迭代都会生成不同的密码(理论上)。

这一步非常重要,需要把模式(model)的判断,密码的生成都写到__next__方法中,配合random模块将随机输出符合规则的密码:

import randomclass PasswordBook:small_character = "abcdefghijklmnopqrstuvwxyz"big_character = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"number = "0123456789"special_sign = "~!@#$%^&*()_+|}{[]';,./<>:=-"def __init__(self, min_len, max_len, model):  self.model = modelif min_len < max_len:self.min_len = min_lenself.max_len = max_lenelse:self.min_len = max_lenself.max_len = min_lendef __iter__(self):  return selfdef __next__(self):  result_word = ''# 判断模式if model == 1:words = self.numberelif model == 2:words = self.number+self.small_character+self.big_characterelse:words = self.number+self.small_character+self.big_character+self.special_sign# 随机迭代输出符合要求的密码for i in range(0, random.randint(self.min_len, self.max_len)):  result_word += random.choice(words)  return result_word

测试输出下,假装我有个10位数,密码字符组成不详(使用数字、字母、特殊字符组合的model3吧):

for pwd in PasswordBook(1,10,model=3):print(pwd)

输出结果:

一堆密密麻麻的乱码就在屏幕上飞奔。

我算了下这种情况最坏的情况要试839299365868340次,才能试出正确密码。

后记 

这个简易密码本不仅仅能用于密码破解,还能用于密码的生成、验证码的生成。

但是我觉得,本文让大家得到最大的感受就是..以后密码还是设复杂点好,能用上特殊字符就用上特殊字符(哪怕一个),也会使暴力破解的成本变大好几倍。

教你如何使用 python 制作一个简单的密码本相关推荐

  1. 怎么用python制作简单的程序-神级程序员教你如何用python制作一个牛逼的外挂!...

    玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过如何做一个外挂呢?(当然用外挂不是那么道义哈,呵呵),那我们就来看一下如何用python来制作一个外挂.... 我打开了4399小游 ...

  2. 手把手教你如何用Python制作一个电子相册?末附python教程

    这里简单介绍一下python制作电子相册的过程,主要用到tkinter和pillow这2个库,tkinter用于窗口显示照片,pillow用来处理照片,照片切换分为2种方式,一种是自动切换(每隔5秒) ...

  3. Python制作一个简单的抽奖软件(二)

    Python制作一个简单的抽奖软件(二) 认识QT 因为都对 QT和tkinter都没用过,之前简单使用tkinter后发现,界面调整不太好弄.然后度娘了之后,QT是强大GUI库之一,很多人都推荐它. ...

  4. 如何用Python制作一个简单的二维码生成器

    目录 前言 1.安装第三方库 2.QRCode参数解释 3.自定义二维码生成器 4.给二维码加图片 5.全部代码 6.结果 前言 二维码又称二维条码,常见的二维码为QR Code,QR全称Quick ...

  5. 国外大牛教你,如何用Python开发一个简单的区块链数据结构| 建议收藏

    来源 | Medium 作者 | arjuna sky kok 整理 / Aholiab 出品 | 区块链大本营(blockchain_camp) 根据IEEE此前的一项调查,Python已成为最受开 ...

  6. 使用Python制作一个简单的刷博器

    呵呵,不得不佩服Python的强大,寥寥几句代码就能做一个简单的刷博器. import webbrowser as web import time import oscount=0 while cou ...

  7. 用Python制作一个简单的球球大作战

    大家好,我是查理.今天教大家制作一个简化版球球大作战 话不不多说,上代码 # -*- coding: utf-8 -*- # @Time : 2018/7/30 16:19 # @Author : G ...

  8. python初级教程 doc_3分钟教你用python制作一个简单词云|python基础教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 首先需要安装三个包: # 安装:pip install matplotlib # 安装:pip insta ...

  9. python制作一个简单的文字游戏——零基础学python 004

    前言: 之前我们简单的学习了一些函数,所谓学以致用.那么我们看看用这几个函数能够做出怎么样的文字游戏? 游戏的思路很简单,要求输入一个程序已经设置好的数字,猜中了返回一句话话,猜错了返回一句话:然而只 ...

最新文章

  1. Java数据类型中String、Integer、int相互间的转换
  2. opencv_IplImage未定义的标识符解决
  3. 繁琐又危险的任务(varchar--nvarchar)
  4. 人人皆可大数据!SACC教你玩转阿里ODPS
  5. 年入百万还是低龄低收入?9.04亿网民的真实面目,都藏在这些数据里
  6. 如何读懂UWA性能报告?—NGUI篇
  7. php select socket
  8. matlab+nnf.m,中南大学-信号与系统matlab实验报告.doc
  9. sed 替换_sed命令批量替换文件内容
  10. 计算机一级考试第一套题电子表格,计算机等级考试一级上机试题(第一套)
  11. 计算机二级c语言的书籍,全国计算机二级c语言
  12. 如何才能真正的学会设计模式
  13. 第九讲 函数间接展开成幂级数
  14. 西门子V20变频器Modbus通信的配置和报文
  15. 自相关函数与互相关函数
  16. CSDN Markdown 图片排版显示
  17. html中onfocus作用,HTML onfocus用法及代码示例
  18. (二十一)sift 特征点检测
  19. 洛谷P5601-小D与笔试(字符串处理)
  20. 苹果ppt_最近苹果新机的3个动画霸屏了,PPT制作竟如此简单,手把手教你做出来!...

热门文章

  1. 【毕业设计选题】2022通信工程毕业设计题目推荐大全
  2. 微信小程序开发13 云开发:云原生一体化应用开发平台
  3. cadence 页间连接符标号的 删除,添加,更新
  4. creator 反复横跳瞄准线的实现
  5. 从工具了解大数据之Kettle
  6. 全国女人都当妓女的古代神秘国(转载)
  7. 使用局域网IP地址作为小程序的测试IP
  8. FAQ04【ElastiSearch】报错:org.elasticsearch.discovery.MasterNotDiscoveredException异常解决
  9. dell10代cpu装linux,戴尔10代CPU完美装Win7|DELL 10代CPU装Win7教程
  10. 时光老去,远了年少的我