python實現密碼破解

MHyourh發表於2020-11-10

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)

  • 引數一:可迭代物件
  • 引數二:要選取的個數

返回值:返回一二迭代器,迭代器中的每一個元素都是一個元組

'''
遇到問題沒人解答?小編建立了一個Python學習交流QQ群:778463939
尋找有志同道合的小夥伴,互幫互助,群裡還有不錯的視訊學習教程和PDF電子書!
'''
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

5120/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.瘋狂破解密碼

傷敵一千自損一萬的破解方式

'''
遇到問題沒人解答?小編建立了一個Python學習交流QQ群:778463939
尋找有志同道合的小夥伴,互幫互助,群裡還有不錯的視訊學習教程和PDF電子書!
'''
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

相關文章