python实现密码破解

排列组合(破解密码)

关注公众号“轻松学编程”了解更多。

1.排列

itertools.permutations(iterable,n)
参数一:要排列的序列,
参数二:要选取的个数
返回的是一个迭代对象,迭代器中的每一个元素都是一个元组

 import itertools
 # 概念:从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,
 # 叫做从n个元素中取出m个元素的一个排列(Arrangement)。
 # 特别地,当m=n时,这个排列被称作全排列(Permutation)
  '''
1 2 3 4
 假设从中取出3个数字
123
 132
 213
 231
 321
 312
'''
#需求:从[1,2,3,4]4个数中随机取出3个数进行排列
 mylist = list(itertools.permutations([1,2,3,4], 3))
 print(mylist)
 print(len(mylist))

 '''
 规律总结:

 4 - 3   24
 4 - 2   12
 4 - 1   4

 排列的可能性次数:n! / (n-m)!

 '''

2.组合

itertools.combinations(iterable,n)
参数一:可迭代对象
参数二:要选取的个数
返回值:返回一二迭代器,迭代器中的每一个元素都是一个元组

import itertools

# 概念:从m个不同的元素中,任取n(n≤m)个元素为一组,
# 叫作从m个不同元素中取出n个元素的进行组合
'''
1 2 3 4 5 中选4个数的组合方式有几种?
'''
mylist = list(itertools.combinations([1,2,3,4,5], 4))
print(mylist)
print(len(mylist))

'''
规律总结:

m   n
5 - 5   1
5 - 4   5
5 - 3   10
5 - 2   10

5!
120/120(m-n)!
120/24(m-n)!
120/6(m-n)!
m!/(n!x(m-n)!)
'''
3.排列组合

itertools.product(iterable,repeat=1)
参数一:可迭代对象,参数二:重复的次数,默认为1

import itertools

'''
_ _ _ _ _
'''

mylist = list(itertools.product("0123456789QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm", repeat=6))
#可以尝试10,有可能电脑会卡住
#多线程也不行,电脑内存不够,咋处理都白搭
#print(mylist)
print(len(mylist))

扩展:现在但凡涉及到密码,一般都会进行加密处理,常用的加密方式有MD5,RSA,DES等

4.疯狂破解密码

伤敌一千自损一万的破解方式

import time
import itertools
#mylist = list(itertools.product("0123456789", repeat=10))
passwd = ("".join(x) for x in itertools.product("0123456789QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm", repeat=6))
#print(mylist)
#print(len(mylist))
while True:
    #先直接实现,然后再添加异常
    try:
        str = next(passwd)
        time.sleep(0.5)
        print(str)
    except StopIteration as e:
        break

后记

【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。

也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!

公众号

公众号

赞赏码

关注我,我们一起成长~~

posted @ 2019-11-05 20:58  轻松学编程  阅读(2045)  评论(0编辑  收藏  举报