本文實(shí)例講述了python實(shí)現(xiàn)的排列組合、破解密碼算法。分享給大家供大家參考,具體如下:
排列組合(破解密碼)
1.排列
1
|
itertools.permutations(iterable,n) |
參數(shù)一:要排列的序列,
參數(shù)二:要選取的個(gè)數(shù)
返回的是一個(gè)迭代對(duì)象,迭代器中的每一個(gè)元素都是一個(gè)元組
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import itertools #概念:從n個(gè)不同元素中取出m(m≤n)個(gè)元素,按照一定的順序排成一列,叫做從n個(gè)元素中取出m個(gè)元素的一個(gè)排列(arrangement)。特別地,當(dāng)m=n時(shí),這個(gè)排列被稱作全排列(permutation) ''' 1 2 3 4 假設(shè)從中取出3個(gè)數(shù)字 123 132 213 231 321 312 ''' #需求:從[1,2,3,4]4個(gè)數(shù)中隨機(jī)取出3個(gè)數(shù)進(jìn)行排列 mylist = list (itertools.permutations([ 1 , 2 , 3 , 4 ], 3 )) print (mylist) print ( len (mylist)) ''' 規(guī)律總結(jié): 4 - 3 24 4 - 2 12 4 - 1 4 排列的可能性次數(shù):n! / (n-m)! ''' |
2.組合
1
|
itertools.combinations(iterable,n) |
參數(shù)一:可迭代對(duì)象
參數(shù)二:要選取的個(gè)數(shù)
返回值:返回一二迭代器,迭代器中的每一個(gè)元素都是一個(gè)元組
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import itertools #概念:從m個(gè)不同的元素中,任取n(n≤m)個(gè)元素為一組,叫作從m個(gè)不同元素中取出n個(gè)元素的進(jìn)行組合 ''' 1 2 3 4 5 中選4個(gè)數(shù)的組合方式有幾種? ''' mylist = list (itertools.combinations([ 1 , 2 , 3 , 4 , 5 ], 4 )) print (mylist) print ( len (mylist)) ''' 規(guī)律總結(jié): 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.排列組合
1
|
itertools.product(iterable,repeat = 1 ) |
參數(shù)一:可迭代對(duì)象,參數(shù)二:重復(fù)的次數(shù),默認(rèn)為1
1
2
3
4
5
6
7
8
9
|
import itertools ''' _ _ _ _ _ ''' mylist = list (itertools.product( "0123456789qwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnm" , repeat = 6 )) #可以嘗試10,有可能電腦會(huì)卡住 #多線程也不行,電腦內(nèi)存不夠,咋處理都白搭 #print(mylist) print ( len (mylist)) |
擴(kuò)展:現(xiàn)在但凡涉及到密碼,一般都會(huì)進(jìn)行加密處理,常用的加密方式有md5,rsa,des等
4.瘋狂破解密碼
傷敵一千自損一萬的破解方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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: #先直接實(shí)現(xiàn),然后再添加異常 try : str = next (passwd) time.sleep( 0.5 ) print ( str ) except stopiteration as e: break |
希望本文所述對(duì)大家python程序設(shè)計(jì)有所幫助。
原文鏈接:https://blog.csdn.net/lm_is_dc/article/details/80174742