您的位置:首页 > 脚本大全 > > 正文

python排列组合计算方法(Python实现的排列组合、破解密码算法示例)

更多 时间:2021-10-23 10:23:52 类别:脚本大全 浏览量:2026

python排列组合计算方法

Python实现的排列组合、破解密码算法示例

本文实例讲述了python实现的排列组合、破解密码算法。分享给大家供大家参考,具体如下:

排列组合(破解密码)

1.排列

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

  • ?
  • 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个不同元素中取出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.组合

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

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 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.排列组合

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

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • import itertools
  • '''
  • _ _ _ _ _
  • '''
  • mylist = list(itertools.product("0123456789qwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnm", repeat=6))
  • #可以尝试10,有可能电脑会卡住
  • #多线程也不行,电脑内存不够,咋处理都白搭
  • #print(mylist)
  • print(len(mylist))
  • 扩展:现在但凡涉及到密码,一般都会进行加密处理,常用的加密方式有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:
  •   #先直接实现,然后再添加异常
  •   try:
  •     str = next(passwd)
  •     time.sleep(0.5)
  •     print(str)
  •   except stopiteration as e:
  •     break
  • 希望本文所述对大家python程序设计有所帮助。

    原文链接:https://blog.csdn.net/lm_is_dc/article/details/80174742

    您可能感兴趣